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