如果我有一个无限递归错误,当我在ddd
中发现此错误时,从segfault产生回溯将花费很长时间。
如果a
,b,
,c,
等是函数并且调用堆栈为
a b c c c c ... (thousands) ... c c (SIGSEGV)
或
a b c b c ... (thousands) ... b c b c (SIGSEGV)
可能需要几分钟才能生成关联的堆栈跟踪。
如果我怀疑是这种情况,是否有办法告诉gdb / ddd快速跳到重复的开始,而不是等待它一直跟踪到整个备份?
答案 0 :(得分:1)
在无限递归的情况下,您不必打印完整的回溯。您只需要few outermost frames即可了解无限递归的原因。例如,您可以使用以下命令打印10个最外面的帧:
void createHeader(HEADER *yourHeader)
{
yourHeader = malloc(sizeof(HEADER));
if (yourHeader == NULL)
printError();
yourHeader->first = NULL;
yourHeader->last = NULL;
yourHeader->length = 0;
}
要打印的确切帧数可能会有所不同,具体取决于无限递归的开始位置。