如果调试信息存储在程序数据库中(不是作为可执行文件的一部分),是否有任何理由不始终使用它进行构建(例如,MSVC 的 /Zi
)?
在 CMake 中,默认配置是“Release”、“Debug”、“RelWithDebInfo”和“MinSizeRel”。是否有理由不只使用“Debug”和“RelWithDebInfo”(可能重命名为“Release”)?
它对代码的大小或性能有什么影响吗? gcc 或 clang 的答案与 Visual C++ 的答案是否不同?
更新
我确实遇到了这些类似的帖子:
但是,这些都没有涉及 Release 与 RelWithDebInfo 的问题。
是的。我可以使用 Release 与 RelWithDebInfo 对可执行文件进行测试。这肯定会给我关于代码大小的答案,但如果我的测试用例显示出类似的性能,就很难得出它对性能没有影响的结论。我怎么知道我是否练习了语言中可能会受到变化影响的方面?也就是说,实证检验可能会产生假阴性。
最佳答案
对于现实生活中的开发,必须使用调试信息进行发布。当狗屎发生时,您的主要工具将是故障转储分析,如果没有调试信息,这将毫无意义。请注意,这并不意味着随产品一起提供调试信息。
至于 vc++ 和 gcc 之间的“小区别”,我想提一下,默认情况下 vc++ 在单独的文件中发出调试信息,而 gcc 会将其压缩到可执行文件中。也可以在 gcc 上分离调试信息,但是这样做不那么方便并且 requires some extra steps .
关于c++ - 为什么不总是构建带有调试信息的版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47703642/