发布模式下的调试(优化开启时)和调试模式下的调试有啥区别?

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,你才能知道。

【讨论】:

以上是关于发布模式下的调试(优化开启时)和调试模式下的调试有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章