可以从gdb中的finish返回值与执行中的实际值不同

时间:2018-01-01 01:20:45

标签: gdb gssapi

我是gdb新手,我正在尝试调试一些GSSAPI代码,并使用fin来查看帧的返回值。如下面的剪辑所示,gssint_mechglue_initialize_library()的来电似乎是0,但实际检查似乎失败了。有人可以指出我是否遗漏了一些明显的东西吗?

提前致谢!

gdb snip for return value

1 个答案:

答案 0 :(得分:1)

观察到的行为的一个可能的解释是您正在调试优化的代码,并且该行1001不是真正执行。

您可以使用一些next确认这一点,或者再次执行fin并观察GSS_S_COMPLETE是否从gssint_select_mech_type返回。

当启用优化时,优化器执行的代码运动通常会阻止将实际代码序列正确分配给行号(因为“属于”不同行的指令被混合并重新排序)。这经常导致代码在例如“跳转”时“跳转”。执行nexti命令。

为了便于调试,请使用-O0重新编译,或确保从编译行中删除任何-O2等。