【发布时间】:2014-05-17 05:44:01
【问题描述】:
有一件尴尬的事情,可能不好问,但我想听听有没有人以前有过类似的经历。 我正在调试一个巨大的 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 之间。我的意思是使用 continue ,我无法确定有多少步骤会导致错误。我认为通过这种方式找出错误的确切时间并没有错。但我根本没有在某个确切的时间发生..
我怎样才能找出错误的确切时间?有经验的大侠,请给点建议,如果我做错了,请纠正我。 另外,如何找到“warry_set”的定义? “step”没有进入那个函数,“info function warry_set”什么也没找到。 :( "whatis warry_set" 说,没有这样的符号,也许我没有加载每个符号。
提前谢谢你
【问题讨论】:
-
嗨,Olaf,效果很好。非常感谢