我是Windows开发的新手,我的编程技巧不是那么强(我有EE背景,专业是半导体),但至少我理解C / C ++的基础。
关于Windows C ++项目,我发现我可以在visual studio中调试和发布版本(通过添加断点和读取变量的值)进行调试。我做了一些研究,我发现只要有一个PDB文件,我就可以进行调试。但是,“可调试”版本构建是否会影响性能?
我还读到了关于在Visual C ++项目中禁用调试的问题。如果我禁用调试,发布版本的性能是否会优于支持调试的版本?
抱歉我的英语不好。
答案 0 :(得分:4)
不,没有区别。默认情况下,链接器的/ DEBUG选项仅针对Release版本关闭。它生成的PDB对于调试来说并不是那么有用,为Release版本打开的优化器会使调试会话变得非常混乱。在某些语句中设置断点时遇到问题,请参阅单步执行奇怪(代码突出显示无法预测)和调试器无法向您显示变量值。
尽管如此,有时你确实需要PDB文件,当你获得一个minidump时它是无价之宝。当您的程序在千里之外坠毁并烧毁时由客户记录。您需要为此进行规划,生成PDB并存储它们非常重要,这样您在分析minidump时就可以使用它们。
答案 1 :(得分:3)
启用PDB生成不会影响代码生成,因此如果启用PDB,则Release代码的性能不会改变。
(请注意,优化代码的调试不如调试非优化代码那样可靠......您会发现当前行似乎跳了起来,并且您不能总是依赖于报告的值变量。)
答案 2 :(得分:0)
可以在带或不带PDB文件的Windows中调试二进制文件。 PDB是一个排序数据库,它为调试器提供信息,例如本地名称,本地类型,源映射偏移等等。这些都不是调试它所必需的,只是使它成为一个整体更好。如果您如此倾向于直接调试程序集而不使用PDB。
因此,实际上没有“禁用调试”的概念。真的,这取决于您是否构建调试/发布版本。 Debug版本通常比Release版本更具可调试性,因为编译器会注意保留有趣的本地文件并插入no-ops以使步进更好。发布版本都是关于最终输出的性能,并且会牺牲简单的调试来实现它