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

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

【讨论】:

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

调试模式下的directx音频视频错误消息

发布模式下的异常,而不是调试模式下的异常

为啥发布和调试模式下的代码行为不同?

我自己在调试模式下的二进制文件“二进制文件不是用调试信息构建的”

COM Interop 和 .NET 3.5 的问题 - 调试和发布模式下的不同行为

调试器模式下的表达式视图不显示值 - Eclipse