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
等。
我是 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
等。