0

我有一个类似的代码片段:

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

    /* do this */

    return ret;
}

对于函数func内部的某些错误条件,该函数返回 -1。这种错误情况在函数被调用的 100 次中发生一次test- 所以我将断点放在if (ret < 0)一行中。现在我想调试函数内部发生的事情func()test当断点在所述行的函数中被击中时,我该怎么做。

4

2 回答 2

2

我会在

return -1;

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

于 2012-12-27T09:23:01.897 回答
0

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

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

于 2012-12-27T09:46:57.897 回答