发布模式下的调试(优化开启时)和调试模式下的调试有啥区别?
Posted
技术标签:
【中文标题】发布模式下的调试(优化开启时)和调试模式下的调试有啥区别?【英文标题】:What is the difference between DEBUG on in Release Mode(while Optimize is on) and Debugging in Debug Mode?发布模式下的调试(优化开启时)和调试模式下的调试有什么区别? 【发布时间】:2016-10-07 14:58:00 【问题描述】:在发布模式下调试我的 C# 项目时,我无法查看变量。然而,在项目设置中启用调试时,我能够观察局部变量值。我知道生成了符号定义,但是在发布模式下调试时,调试和编译时间和 JIT 优化如何一起发挥作用?
【问题讨论】:
【参考方案1】:优化是对代码进行无害更改的过程。很难确定您的变量何时会在发布中看到。可以执行或不执行优化。例如这里的代码:
int GetInt()
var a = 1;
var b = a;
var c = b;
return b;
可能会在 JIT 中消失,将被内联或编译为:
int GetInt() return 1;
如您所见,您没有定义任何变量。在某些情况下,可以为实际源代码生成符号,在某些情况下是不可能的,直到你反编译它并查看 IL,你才能知道。
【讨论】:
以上是关于发布模式下的调试(优化开启时)和调试模式下的调试有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
我自己在调试模式下的二进制文件“二进制文件不是用调试信息构建的”