gdb 中 finish 的 return 值是否可以与执行中的实际值不同

can the return value from finish in gdb be different from the actual one in execution

我是 gdb 新手,我试图调试一些 GSSAPI 代码,并使用 fin 从框架中查看 return 值。正如下面粘贴的片段所示,来自 gssint_mechglue_initialize_library() 的调用似乎是 0 但实际检查似乎失败了。如果我在这里遗漏了一些明显的东西,有人可以指出吗?

提前致谢!

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

您可以用几个 next 来确认这一点,或者再次执行 fin 并观察 gssint_select_mech_type 是否返回 GSS_S_COMPLETE 或其他内容。

启用优化后,优化器执行的代码移动通常会阻止将实际代码序列正确分配给行号(因为针对不同行的指令 "belonging" 会混合并重新排序)。例如,这通常会导致代码 "jump around"。执行 nexti 命令。

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