C GDB,在递归函数中继续,可以';不要在精确的步数后停止

C GDB,在递归函数中继续,可以';不要在精确的步数后停止,c,gdb,C,Gdb,有一件很尴尬的事,也许不好问,但我想听听以前是否有人有过类似的经历。 我正在调试一个巨大的c源代码,我找到了错误发生的地方。它位于递归函数中 bool interpret(...) { switch(..) .... .... case INSTR_GETLINK: { LmnInstrVar linki, atomi, posi; READ_VAL(LmnInstrVar, instr, linki); READ_VAL(LmnInstrVar, i

有一件很尴尬的事,也许不好问,但我想听听以前是否有人有过类似的经历。 我正在调试一个巨大的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”报告错误,这让我想到,错误发生在“warry_set”的100时间内。有时会出现错误,介于100-200之间。我的意思是,通过使用continue,我无法确定有多少步会导致错误。我认为用这种方法找出错误的确切时间没有什么错。但我只是没有在某个确切的时间出现

我怎样才能知道错误的确切时间?有经验的朋友,请给我一些建议,如果我做错了,请纠正我。 另外,如何找到“warry_set”定义?“步骤”未进入该函数,“信息函数warry_set”未找到任何内容:( “whatis warry_set”说,没有这样的符号,也许我没有加载每个符号


提前感谢

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

谢谢,这听起来很好。还有一个问题,GDB,我如何找到函数的定义?我的意思是,我想知道“warry_设置”在哪里已定义,但找不到它。我是linux的新手,所以..@alim:最简单的方法是在函数上设置断点,看看它是否报告源代码文件名和行号。
break warry\u set
。break warry\u set说函数warry\u set没有定义。没有定义,没有准确的错误时间,这就成了一个大问题我代表me@alim:试着键入
break warry\u set
,然后按一下键(可能几次),看看它是否提供了所需的功能。看看这个问题嗨,奥拉夫,它工作得很好。非常感谢