使用g ++和-Og选项优化的变量

Sva*_*erg 18 c++ g++ compiler-flags

当我g++使用-Og选项编译我的C++程序时,我会看到变量<optimized out>,并且当前行有时会跳过.这种行为是期望在这个优化级别,还是我有一些问题?gcc的手册页说:

-Og

优化调试体验. -Og启用不会干扰调试的优化.它应该是标准编辑 - 编译 - 调试周期的优化级别,提供合理的优化级别,同时保持快速编译和良好的调试体验.

因此我没想到这种行为.在我的系统上,我有g ++版本4.9.2和gdb版本7.7.1.

Sva*_*erg 6

这是使用该-Og选项编译时的正常行为。在此优化级别,只要遵守as-if规则,编译器就可以进行优化。这可能包括删除变量(或转换为常量),以及删除未使用的函数。

建议要么习惯跳过,要么使用该-O0选项进行编译。

  • 这种行为似乎与文档中的声明“-Og”启用“不干扰调试的优化”直接矛盾。查看变量的值是调试的一个重要组成部分。 (39认同)
  • 假设规则不适用于任何级别的优化吗?它直接来自标准,与 -Og 无关。据我所知 -Og 标志已完全损坏。它极大地干扰了调试。 (2认同)