gdb调试函数不在调用堆栈中

时间:2012-12-27 09:21:22

标签: c debugging gdb

我有一个与此类似的代码段:

int test( /* some arguments */)
{
    ret = func(/* some arguments */)
    if (ret < 0) 
    {
       /* do this */
    }

    /* do this */

    return ret;
}

函数func为函数内部的某些错误条件返回-1。这种错误情况在调用test函数的100次中发生一次 - 所以我将断点放在if (ret < 0)行中。现在我想调试函数func()内部的内容。如果在所述行的test函数中遇到断点,我该怎么做呢。

2 个答案:

答案 0 :(得分:2)

我会在

处设一个断点
return -1;
功能本身

。按照你的方式,函数的堆栈框架已经被破坏了。如果你可以移动代码指针,你可以使用相同的方法再次运行该函数,但如果该函数有副作用,它可能不会以相同的方式作出反应。我不知道该怎么做,也许它需要jump命令。

答案 1 :(得分:0)

行为是否具有确定性?如果是这样,断点命中计数器对此有好处。您可以在生成错误之前的某处设置一个非常大的计数断点,也可以在返回的错误上中断,查看计数器,然后将计数更改为在count-1处中断。然后,您可以在发生错误时调试错误,并且断点可以在代码中的任何位置,而不仅仅是在确切的位置或错误。

条件断点未得到充分利用......