我是windows开发的新手,我的编程技能也没那么强(我有EE背景,专业是半导体),但至少我了解C/C++的基本原理。
关于Windows C++项目,我发现我可以在visual中调试和发布版本(通过添加断点和读取变量的值)。我做了一些研究,我发现只要有一个PDB文件,我就可以做调试。但是,“可调试的”版本构建会影响性能吗?
我还读过关于在visual C++项目中禁用调试的文章。如果我禁用调试,发布版本的性能会比启用调试的版本更好吗?
对不起我的英语坏了。
发布于 2013-11-18 23:29:45
不,没什么区别。默认情况下,对于发布版本,链接器的/DEBUG选项被关闭。它生成的PDB对调试没有多大帮助,为发行版构建打开的优化器会给调试会话造成很大的混乱。在某些语句上设置断点时会遇到困难,看到单步执行奇怪(代码突出显示在无法预测的范围内移动)和调试器无法显示变量值。
尽管如此,有时你真的需要PDB文件,当你得到一个微小的返回时,它是无价的。当你的程序在千里之外崩溃和烧毁时,被客户记录下来。您需要对此进行计划,非常重要的是生成PDB并存储它们,以便在分析小型程序时可以使用它们。
发布于 2013-11-18 22:36:27
启用PDB生成不会影响代码生成,因此如果启用PDB,则发布代码的性能不会改变。
(请注意,优化代码的调试不如调试非优化代码那样可靠.您会发现,当前的行似乎是跳来跳去的,并且不能总是依赖报告的变量值。)
发布于 2013-11-18 22:39:01
二进制文件可以在有或没有PDB文件的窗口中调试。PDB是一个排序数据库,它向调试器提供信息,如局部变量的名称、局部变量的类型、偏移到源映射等.所有这些都不是调试所必需的,它只会使它变得更好。如果您愿意,您可以直接调试程序集没有PDB。
因此,实际上没有“禁用调试”的概念。实际上,这取决于您是否构建了调试/发行版构建。Debug构建通常比发行版版本更易于调试,因为编译器将注意保持有趣的局部变量,并插入无操作以使步进更好。发行版构建都是关于最终输出的性能,并将牺牲轻松的调试来实现它。
https://stackoverflow.com/questions/20059393
复制相似问题