前段时间我读过一篇关于CLR的文章,其中作者表明,如果项目是在DEBUG模式下编译的,那么在每个操作符出现NOP命令之前,都允许调试代码。不过,今天我发现我们也可以在发布模式下调试...... 请帮助理解差异。
答案 0 :(得分:6)
调试.net代码,以便在执行源代码时执行它通常需要三件事:
符号由/debug:{full | pdbonly}标志控制。如果指定/debug:full
(即使在发布版本中,关闭了编译器优化),您也可以附加到已在运行的进程并逐步执行代码。如果您有/debug:pdbonly
,则必须使用调试器来启动程序(并且在附加到已经运行的进程时无法查看符号)。
优化由/debug编译器选项精细控制,但可以由/optimize-进一步控制。
答案 1 :(得分:2)
在发布模式下进行编译可以优化生成的二进制文件,这使得调试器更难(但并非不可能)知道哪个二进制代码来自哪个源代码行。
调试模式旨在使调试器更容易“跟随”,因此它将代码行与NOP分开,并且不会优化生成的二进制文件。
答案 2 :(得分:1)
您可以在Release模式下进行调试。调试和发布只是构建配置(你可以创建很多),真正的区别是Debug配置不优化生成的二进制代码(优化的代码使调试复杂化)。它还会生成其他调试数据,但不会发布。