如果发布版本生成.pdb文件,您可以进入每一行,设置断点等,那么为什么还要构建我的组件的“调试”版本呢?
我在我的项目中使用C#,没有问题调试发布版本。在C++中,我在调试优化代码时遇到了问题,但在C#中它能正常工作。我不是在谈论像
我在我的项目中使用C#,没有问题调试发布版本。在C++中,我在调试优化代码时遇到了问题,但在C#中它能正常工作。我不是在谈论像
if(false)
这样愚蠢的代码块...if(false)
这样愚蠢的代码块...一个原因是附加 vs. 启动。
如果在 .Net 中启动零售进程,则调试几乎与启动调试进程一样好。您可能不会注意到任何调试经验上的区别。
附加是完全不同的游戏。C# 和 VB 都通过 /optimize+ 标志传递给零售版本。这将在程序集级别嵌入 DebuggableAttribute,而没有 DebuggingMode.DisableOptimizations 标志。在进程启动期间,VS/CLR 将通信以基本忽略此事,并禁用影响调试的 JIT 优化。在附加期间,没有这样的项目发生,JIT/CLR 将进行最优化。我保证,在这种情况下,调试体验要差得多。
您可以在 VS 中进行实验
#define DEBUG
来在未捕获异常时改变行为:
Debug.Assert
等的调用都将被删除。发布版本比调试版本进行了额外的优化,但是调试版本也会略微改变GC的行为,以确保您在调试会话中不会因对象被收集而出现错误。调试版本还会阻止某些JIT优化的发生,这将对您的调试会话产生负面影响。
我同意Lennaert的观点 - 我倾向于在不同的构建版本中进行不同的错误处理。例如,对于某些应用程序,在调试构建中我会非常严格。预先和后置条件、断言、异常等等。基本上,我试图强制开发人员正确使用我的库。另一方面,在发布版本中,我会放松这些条件以提高性能。