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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可以从gdb中的finish返回值与执行中的实际值不同相关的知识,希望对你有一定的参考价值。

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

提前致谢!

gdb snip for return value

答案

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

你可以用几个nexts确认这一点,或者再次执行fin并观察是否从GSS_S_COMPLETE返回gssint_select_mech_type或其他东西。

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

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

以上是关于可以从gdb中的finish返回值与执行中的实际值不同的主要内容,如果未能解决你的问题,请参考以下文章

gdb中一些常用的调试命令

gdb中的多个命令由某种分隔符';'分隔?

从数据库返回值与另一个结果集

gdb 中step,next与finish的区别

javascript - 在对象数组中,返回任何值与特定字符串匹配的对象

返回查询的所有行,其中一列中的字符串值与另一列中的字符串值匹配