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

标签 c# debugging

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

“优化代码”复选框未选中。构建配置是 Debug。

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

最佳答案

惰性选项是......使用值,理想情况下不允许将其保存在堆栈中。例如:

 var tmp = SomeMethod();
 // your other code
 Debug.WriteLine(tmp);

将值用作参数意味着它必须保留,但该行不会自动编译到发布版本中。

但是!我必须强调,本地人几乎总是保留在未优化/调试构建中,所以我发现问题中的场景很难想象。

关于c# - 如何防止 C# 编译器/CLR 在 DEBUG 构建中优化掉未使用的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7831964/

相关文章:

node.js - Loopback 4 Debugger nodemon 解决方案

c - C 和 C++ 的最佳调试工具

c# - 在 C# 中将数据加载到 DataTable 会出现 "Unknown SQL type - 0"错误

c++ - 内存模块是否映射到进程的虚拟空间?

c++ - 调试构建如何使逆向工程变得容易?

c# - uwp 我应该在数据模板中使用用户控件吗?

ios - Xcode 中的线程调试

c# - 如何在 Windows 窗体中隐藏控件的大小调整句柄?

c# - 使用 LINQ 编辑 XML 输出

c# - iTextSharp 添加图像