为什么不总是使用调试信息构建一个版本?

时间:2017-12-07 20:56:43

标签: c++ debugging visual-c++ build cmake

如果调试信息存储在程序数据库中(而不是作为可执行文件的一部分),是否有任何理由不总是使用它构建(例如,MSVC' s /Zi)?

在CMake中,默认配置为" Release"," Debug"," RelWithDebInfo"和" MinSizeRel"。有没有理由不使用" Debug"和" RelWithDebInfo" (也许改名为"发布")?

它对代码的大小或性能有影响吗? gcc或clang的答案与Visual C ++的答案不同吗?

更新

我确实遇到过类似的帖子:

然而,这些都没有达到Release vs. RelWithDebInfo的问题。

是。我可以使用Release vs. RelWithDebInfo对可执行文件进行测试。这肯定会给我关于代码大小的答案,但如果我的测试用例表现出相似的性能,那么很难得出它对性能没有影响的结论。我怎么知道我是否运用了可能受变更影响的语言的各个方面?也就是说,经验测试可能会产生假阴性。

1 个答案:

答案 0 :(得分:4)

使用调试信息发布对于实际开发是必需的。当狗屎发生时,您的主要工具将是崩溃转储分析,如果没有调试信息,这将是毫无意义的。请注意,这并不意味着随产品发送调试信息。

至于vc ++和gcc之间的“小差异”我想提一下,默认情况下,vc ++会在单独的文件中发出调试信息,而gcc会将其压缩成可执行文件。也可以在gcc上分离调试信息,但这样做并不方便requires some extra steps