如何防止C#编译器/ CLR在DEBUG构建中优化掉未使用的变量?

srg*_*stm 8 c# debugging

在调试时我试图将计算的中间结果保存到变量中,以便在满足断点条件时我可以检查该值.但是,C#编译器(或CLR)将该变量优化为未使用.我通过使变量成为类的公共字段来解决问题,但是我想知道是否有一个直接的解决方案来解决这个问题.

未选中"优化代码"复选框.构建配置是Debug.

编辑:发现它只影响迭代器中一些未使用的变量,这些变量通常最终会作为自动生成的迭代器类中的字段; 保留在不包含yield语句的块中作用域的未使用变量.

Mar*_*ell 6

懒惰的选项是...... 使用该值,理想情况是以不允许它保存在堆栈上的方式.例如:

 var tmp = SomeMethod();
 // your other code
 Debug.WriteLine(tmp);
Run Code Online (Sandbox Code Playgroud)

使用值作为参数意味着必须保留它,但该行自动不会编译为发布版本.

然而!我必须强调的是,本地人总是保留在未经优化/调试的版本中,所以我从难以想象的问题中找到了这个场景.