有一个尴尬的事情,可能不是一个好问的人,但我想听听以前是否有人有类似的经历。 我正在调试一个巨大的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”,我多次改变了这个数字 问题是,有时“继续100”报告错误,这让我想到,错误发生在“warry_set”的100倍内。有时会发生错误,介于100-200之间。我的意思是通过使用继续,我无法确定导致错误的步数。我认为通过这种方式找出确切的错误时间是没有错的。但我根本没有在某个确切的时间发生..
如何找出确切的错误时间?有经验的人,请提出一些建议,或者如果我做错了,请纠正我。 另外,如何找到“warry_set”定义? “step”没有进入该功能,“info function warry_set”确实找不到任何东西。 :( “whatis warry_set”说,没有这样的符号,也许我没有加载每个符号。
提前谢谢
答案 0 :(得分:1)
虽然您可能想出一种设置良好条件断点的方法,但添加到warry_set()
将消息写入文件(或控制台)可能会更容易,可能包括其有趣的参数值。