为什么GCC在设置为O0时仍然优化了什么?

时间:2013-10-21 12:29:07

标签: c debugging gcc gdb redis

在调试Redis时,我使用make noopt编译了代码,在Makefile中,优化设置为O0。在调试时,我仍然有一些优化的东西:

GDB screen shot

在第1行中,我们可以看到aeDeleteFileEvent的所有参数,但当我进入aeApiDelEvent(第-2行)时,其所有参数都是<optimized out>

为什么这些发生了?

另一个问题,在第3行,我列出了所有断点。实际上,第3个断点是我在调试文件( x.gdb )中设置的aeApiDelEvent,但为什么它更改为aeDeleteFileEvent

1 个答案:

答案 0 :(得分:0)

好的,谢谢@alk(事实是GCC优化它)和@markys(V=1适合我)。

我发现Redis的Makefile中有一个棘手的问题(可能是Bug,因为它使make noopt对调试没有影响),有一个规则将包含.make-settings,并且在文件中,一个选项的设置是O2优化。

在Makefile中注释该行后,现在GDB中没有出现任何优化。