继续递归函数的GDB在精确步数之后无法停止

时间:2014-05-17 05:44:02

标签: c gdb

有一个尴尬的事情,可能不是一个好问的人,但我想听听以前是否有人有类似的经历。 我正在调试一个巨大的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”说,没有这样的符号,也许我没有加载每个符号。

提前谢谢

1 个答案:

答案 0 :(得分:1)

虽然您可能想出一种设置良好条件断点的方法,但添加到warry_set()将消息写入文件(或控制台)可能会更容易,可能包括其有趣的参数值。