c++ - 为什么不总是构建带有调试信息的版本?

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

如果调试信息存储在程序数据库中(不是作为可执行文件的一部分),是否有任何理由不始终使用它进行构建(例如,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/

相关文章:

c++ - 使用队列的 Phantom Bug(STL 库),Windows/MingW/G++

c++ - 在 C++ 中的 memcpy 之后得到 strlen

C++ - Eclipse 行为在调试和运行时是不同的

debugging - 在 Scala 中调试日志而不影响性能

c++ - 模棱两可的期望值

php - 通过 php (LINUX) 运行 Qt 生成的可执行文件 (EXE)

debugging - 我的应用程序挂起,windbg 转储分析显示所有线程都处于挂起/解冻状态。这是什么意思?

c++ - 类崩溃编译器中的 MSVC 2010 模板化映射

c++ - Visual C++ 等同于 GCC 实验性并行 for_each?

c++ - 需要在32/64位QT C++程序中使用Volume Shadow Copy Service