有一个尴尬的事情,可能不是一个好问题,但我想听听是否有人以前有过类似的经历。
我正在调试大量的c源代码,并且发现发生错误的地方。它在递归函数中。
bool interpret(...)
{
switch(..)
....
....
case INSTR_GETLINK:
{
LmnInstrVar linki, atomi, posi;
READ_VAL(LmnInstrVar, instr, linki);
READ_VAL(LmnInstrVar, instr, atomi);
READ_VAL(LmnInstrVar, instr, posi);
warry_set(rc, linki,
LMN_SATOM_GET_LINK(wt(rc, atomi), posi),
LMN_SATOM_GET_ATTR(wt(rc, atomi), posi),
TT_ATOM);
break;
}
....
}
分段错误发生在“ warry_set”。不好的是错误不会在那条线第一次出现
发生几次之后。并且这个“解释”功能在其他许多地方也称为他自己。
我想找出在“ warry_set”发生了几步错误之后。
我通过行号设置断点。
我尝试找出“继续100”,我多次更改了数字
问题是,有时“ continue 100”报告错误,这让我认为,错误在100时间内在“ warry_set”处发生。有时会发生错误,介于100-200之间。我的意思是通过使用Continue,我无法确定导致错误的步骤数。我认为通过这种方式找出错误的确切时间没有错。但我只是没有在特定的确切时间出现。
如何找出错误的确切时间?经验丰富的人,请提出一些建议,如果我做错了,请纠正我。
另外,如何找到“ warry_set”的定义? “ step”没有加入该函数,“ info function warry_set”没有找到任何东西。 :(
“ whatis warry_set”说,没有这样的符号,也许我没有加载每个符号。
先感谢您
最佳答案
尽管您可能能够找到一种设置良好的条件断点的方法,但添加到warry_set()
将消息写入文件(或控制台)(可能包括其有趣的参数值)可能会容易得多。
关于c - GDB,继续递归功能,经过确切的步骤数后无法停止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23708020/