我有一个与此类似的代码段:
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
函数中遇到断点,我该怎么做呢。
答案 0 :(得分:2)
我会在
处设一个断点return -1;
功能本身。按照你的方式,函数的堆栈框架已经被破坏了。如果你可以移动代码指针,你可以使用相同的方法再次运行该函数,但如果该函数有副作用,它可能不会以相同的方式作出反应。我不知道该怎么做,也许它需要jump命令。
答案 1 :(得分:0)
行为是否具有确定性?如果是这样,断点命中计数器对此有好处。您可以在生成错误之前的某处设置一个非常大的计数断点,也可以在返回的错误上中断,查看计数器,然后将计数更改为在count-1处中断。然后,您可以在发生错误时调试错误,并且断点可以在代码中的任何位置,而不仅仅是在确切的位置或错误。
条件断点未得到充分利用......