【问题标题】:Variables optimized out with g++ and the -Og option使用 g++ 和 -Og 选项优化的变量
【发布时间】:2015-07-15 16:16:45
【问题描述】:

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

-Og

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

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

【问题讨论】:

  • "...提供合理级别的优化..."
  • 只要遵守as-if规则,编译器就可以进行优化。这可能包括删除变量(或转换为常量),以及删除未使用的函数。
  • 要么使用 -O0 要么习惯它
  • @ShmilTheCat: "...启用优化,不干扰调试..."
  • 或许应该改名为-O0.5?

标签: c++ g++ compiler-flags


【解决方案1】:

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

建议习惯于跳过或使用-O0选项进行编译。

【讨论】:

  • 这种行为似乎与-Og 启用“不干扰调试的优化”的文档中的声明直接矛盾。查看变量的值是调试的一个重要组成部分。
  • as-if 规则是否适用于任何级别的优化?它直接来自标准,与 -Og 无关。据我所知, -Og 标志已完全损坏。它极大地干扰了调试。
猜你喜欢
  • 2012-09-05
  • 2016-12-17
  • 1970-01-01
  • 2021-07-24
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 2018-01-03
  • 1970-01-01
相关资源
最近更新 更多