Visual Studio(C++)调试中的Debug模式与Release模式

3

我是一名新手,对于Windows开发和编程技术并不是很熟悉(我的专业是半导体工程),但至少我了解C/C++的基础知识。

关于Windows C++项目,我发现在Visual Studio中,只要有PDB文件,就可以在调试和发布版本下进行调试(添加断点和查看变量值)。我做了一些研究,发现“可调试”的发布版本是否会影响性能呢?

我还了解到,可以在Visual C++项目中禁用调试。如果禁用调试,那么发布版本的性能是否会比启用调试的发布版本更好呢?

非常抱歉我的英语不太好。


1
放心吧,你的英语很棒! - Till
3个回答

4
不会有影响。链接器的 /DEBUG 选项在 Release 构建中默认是关闭的。它生成的 PDB 文件对于调试并没有太大作用,Release 构建开启的优化选项使得调试变得非常困难。你可能会遇到无法在某些语句上设置断点、单步执行时代码高亮显示不正常(代码突然跳转)以及调试器无法显示变量值等问题。
然而,有时您真的需要 PDB 文件,尤其是在远离您一千英里之外的客户端程序崩溃时。当您需要分析 minidump 时,生成和存储 PDB 非常重要。

3
启用PDB生成不会影响代码生成,因此如果您启用了PDB,您的发布代码的性能不会发生变化。
(请注意,优化代码的调试不像调试非优化代码那样可靠...您会发现当前行似乎跳来跳去,并且您不能总是依赖于报告的变量值。)

0

在Windows中,二进制文件可以使用或不使用PDB文件进行调试。 PDB是一种数据库,为调试器提供信息,例如本地变量的名称,本地变量的类型,偏移量到源映射等等...这些都不是严格必要的,但使其更加美好。如果您愿意,您可以直接使用没有PDB的汇编进行调试。

因此,实际上不存在“禁用调试”的概念。真正的问题在于您是否构建了Debug / Release版本。 Debug版本通常比Release版本更易于调试,因为编译器会注意保留有趣的本地变量并插入无操作以使步骤更加流畅。 Release版本主要关注最终输出的性能,并牺牲易于调试以实现它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接