如果调试信息存储在程序数据库中(而不是作为可执行文件的一部分),是否有任何理由不总是使用它构建(例如,MSVC' s /Zi
)?
在CMake中,默认配置为" Release"," Debug"," RelWithDebInfo"和" MinSizeRel"。有没有理由不使用" Debug"和" RelWithDebInfo" (也许改名为"发布")?
它对代码的大小或性能有影响吗? gcc或clang的答案与Visual C ++的答案不同吗?
更新
我确实遇到过类似的帖子:
然而,这些都没有达到Release vs. RelWithDebInfo的问题。
是。我可以使用Release vs. RelWithDebInfo对可执行文件进行测试。这肯定会给我关于代码大小的答案,但如果我的测试用例表现出相似的性能,那么很难得出它对性能没有影响的结论。我怎么知道我是否运用了可能受变更影响的语言的各个方面?也就是说,经验测试可能会产生假阴性。
答案 0 :(得分:4)
使用调试信息发布对于实际开发是必需的。当狗屎发生时,您的主要工具将是崩溃转储分析,如果没有调试信息,这将是毫无意义的。请注意,这并不意味着随产品发送调试信息。
至于vc ++和gcc之间的“小差异”我想提一下,默认情况下,vc ++会在单独的文件中发出调试信息,而gcc会将其压缩成可执行文件。也可以在gcc上分离调试信息,但这样做并不方便requires some extra steps。