当我使用
g++
选项用 -Og
编译我的 C++ 程序时,我看到变量是 <optimized out>
,而且当前行有时会跳过。这种行为是在这个优化级别上预期的吗?或者我有什么问题吗? gcc 的手册页说:
-Og
优化调试体验。实现不干扰调试的优化。它应该是标准编辑-编译-调试周期的优化级别选择,提供合理的优化级别,同时保持快速编译和良好的调试体验。-Og
因此我没想到会出现这种行为。在我的系统上,我有 g++ 版本 4.9.2 和 gdb 版本 7.7.1。
这是使用
-Og
选项进行编译时的正常行为。在此优化级别,只要遵守 as-if 规则,编译器就可以进行优化。这可能包括删除变量(或转换为常量),以及删除未使用的函数。
建议要么习惯跳过,要么使用
-O0
选项进行编译。