当前位置:  开发笔记 > 开发工具 > 正文

Visual Studio中的Debug和Release有什么区别?

如何解决《VisualStudio中的Debug和Release有什么区别?》经验,为你挑选了7个好方法。

最重要的是,在调试模式下没有优化,而在发布模式下则有优化.这很重要,因为编译器非常先进,可以对代码进行一些非常棘手的低级改进.因此,您的代码中的某些行可能会在没有任何指令的情况下离开,或者某些行可能会混淆.逐步调试是不可能的.此外,局部变量通常以神秘的方式进行优化,因此Watches和QuickWatches通常不起作用,因为变量是"优化掉的".并且还有许多其他优化.尝试调试优化的.NET代码,你会看到.

另一个关键区别在于,因此默认的Release设置不会产生大量的调试符号信息.这是您可能已经注意到的.PDB文件,它允许调试器确定哪些汇编指令与哪行代码相对应,等等.



1> Vilx-..:

最重要的是,在调试模式下没有优化,而在发布模式下则有优化.这很重要,因为编译器非常先进,可以对代码进行一些非常棘手的低级改进.因此,您的代码中的某些行可能会在没有任何指令的情况下离开,或者某些行可能会混淆.逐步调试是不可能的.此外,局部变量通常以神秘的方式进行优化,因此Watches和QuickWatches通常不起作用,因为变量是"优化掉的".并且还有许多其他优化.尝试调试优化的.NET代码,你会看到.

另一个关键区别在于,因此默认的Release设置不会产生大量的调试符号信息.这是您可能已经注意到的.PDB文件,它允许调试器确定哪些汇编指令与哪行代码相对应,等等.


"最重要的是,在调试模式下没有优化" - 这是有争议的.最重要的是有调试信息可以让你调试.虽然这也可以在发布中存在.

2> Joris Timmer..:

"Debug"和"Release"实际上只是可以影响构建和调试的一系列设置的两个标签.

在"调试"模式下,您通常具有以下内容:

程序调试数据库文件,允许您在运行时在源中非常密切地执行程序.

关闭所有优化,允许您检查变量的值并跟踪可能已经优化或内联的函数

一个_DEBUG预处理器定义,允许您编写与调试模式相比在调试模式下行为不同的代码,例如,用于仅在调试时使用的仪器ASSERT

链接到已经使用调试选项编译的库,这些库通常不会部署到实际客户(出于大小和安全性的原因)

在"释放"模式下,将启用优化(尽管有多个可用选项),并且未定义_DEBUG预处理器定义.通常,您仍然希望生成PDB文件,因为当事情运行得更快时能够在发布模式下"调试"非常有用.


"只有两个标签" - 实际上,Visual Studio使您能够创建_more!_这在测试程序时非常有用.例如,我最近为我的工作编写了一个程序,它从命令行接受文件名.我测试了我的命令行解析,但是一旦完成,我不想每天都搞乱CMD和文件名列表; 我创建了一个配置,我可以使用条件编译来提供虚拟命令行值并测试程序的业务逻辑,这为程序的开发提供了更快的迭代周期.

3> Rik..:

大多数情况下,调试包含许多在调试时有用的额外信息.在发布模式下,这一切都被削减并交易以获得性能.



4> NeARAZ..:

如果您通过项目编译选项并进行比较,您会看到有什么不同.

假设问题是关于本机/ C++代码(从措词中不完全清楚):

基本上,在Debug中,所有代码生成优化都是关闭的.某些库(例如STL)默认为更严格的错误检查(例如,调试迭代器).生成更多调试信息(例如,"编辑并继续").在代码中生成更多东西来捕获错误(局部变量值设置为未初始化模式,使用调试堆).


@Vilx:当我回答时,还没有.net标签,只有visualstudio.所以我认为它是C++.

5> annakata..:

值得一提的是,非常明显的是,构建标志允许使用不同的逻辑,这些逻辑仅用于更改日志记录和"控制台"消息传递,但可以被滥用并且不仅可以显着改变低级别,而且可以显着改变实际的业务逻辑.



6> foraidt..:

另请注意,例如,在使用MFC时,调试项目链接到不可再MFC90D.DLL发行的DLL版本,例如发布构建链接与可再发行版本之类的链接MFC90.DLL.这可能与其他框架类似.

因此,您可能无法在非开发计算机上运行调试构建应用程序.



7> Matt Jacobse..:

另外,显然,Debug模式会创建许多额外的线程来帮助调试.无论是否附加调试器,它们在整个过程中都保持活动状态.在这里查看我的相关问题.

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有