gcc - 构建调试目标时最好的 g++ 优化级别是什么?

标签 gcc g++

当您想构建可调试的东西(特别是 g++,但可能与 gcc 共享一个答案)时,最好的 -O 级别是什么?换句话说,在构建“调试”目标而不是“发布”目标时。

在比较 -O0 和 -O1 ( here ) 时,gcc 在线文档有点粗略。我的解释是 -O1 只启用一种甚至可能影响可调试性的优化,即 -fomit-frame-pointer。但是引用文档,它仅在 -O1 中启用,“这样做不会干扰调试。”我的解释正确吗?

本网站上的另一篇文章 ( here ) 专门讨论了 -O2,答案基本上是“它可以工作,但您会出现乱序执行”。 IMO 的范围可以从烦人到破坏性,具体取决于事情跳动的严重程度。

最佳答案

GCC 4.8 引入了新的优化级别: -Og 为了两全其美。

-Og
Optimize debugging experience. -Og enables optimizations that do not interfere with debugging. It should be the optimization level of choice for the standard edit-compile-debug cycle, offering a reasonable level of optimization while maintaining fast compilation and a good debugging experience.



这样就完成了一些优化,因此您可以获得更好的性能,更好的可能未初始化的变量检测,并且您还可以在 GDB 中单步执行程序,而无需在函数中来回跳转。

关于gcc - 构建调试目标时最好的 g++ 优化级别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7493947/

相关文章:

c - gcc 转储解决定义

c++ - 包含 Rcpp.h 时出现 undefined reference 错误

c++ - 使用 -O2 标志将 gdb 步进到上一行

c++ - SFINAE + decltype 的 g++ 4.7 错误?

c++ - 强制调用者捕获返回值并在 C++ 中生成编译错误或警告的编译器标志

c - 编译C程序时 undefined symbol

GCC代码统计/分析

c++ - 用 g++ .cpp 文件编译 gcc .o 文件

c - 在 Solaris SPARC 上编译 Lua 时有很多警告?

linux - 32位 'dialog'工具静态编译如何满足依赖