2

在调试 Redis 时,我使用 编译了代码make noopt,并且在 Makefile 中,优化设置为O0. 在调试时,我仍然得到了一些优化:

GDB 屏幕截图

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

为什么会发生这些?

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

4

1 回答 1

1

好的,谢谢@alk(事实是 GCC 对其进行了优化)和@markys(V=1对我有用)。

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

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

于 2013-10-21T16:38:43.217 回答