在发布模式下在.NET中进行调试

时间:2012-06-15 15:53:38

标签: .net debugging clr cil

前段时间我读过一篇关于CLR的文章,其中作者表明,如果项目是在DEBUG模式下编译的,那么在每个操作符出现NOP命令之前,都允许调试代码。不过,今天我发现我们也可以在发布模式下调试...... 请帮助理解差异。

3 个答案:

答案 0 :(得分:6)

调试.net代码,以便在执行源代码时执行它通常需要三件事:

    与程序集.dll或.exe 一起构建的
  • 符号(相关的.pdb文件)
  • 来源(相关的.cs,.vb等文件)
  • 执行机器代码必须未优化

符号/debug:{full | pdbonly}标志控制。如果指定/debug:full(即使在发布版本中,关闭了编译器优化),您也可以附加到已在运行的进程并逐步执行代码。如果您有/debug:pdbonly,则必须使用调试器来启动程序(并且在附加到已经运行的进程时无法查看符号)。

优化/debug编译器选项精细控制,但可以由/optimize-进一步控制。

答案 1 :(得分:2)

在发布模式下进行编译可以优化生成的二进制文件,这使得调试器更难(但并非不可能)知道哪个二进制代码来自哪个源代码行。

调试模式旨在使调试器更容易“跟随”,因此它将代码行与NOP分开,并且不会优化生成的二进制文件。

答案 2 :(得分:1)

您可以在Release模式下进行调试。调试和发布只是构建配置(你可以创建很多),真正的区别是Debug配置不优化生成的二进制代码(优化的代码使调试复杂化)。它还会生成其他调试数据,但不会发布。