我可以让gdb / ddd快速跳过无限递归错误的开始吗?

时间:2019-05-12 12:11:01

标签: debugging recursion gdb sigsegv

如果我有一个无限递归错误,当我在ddd中发现此错误时,从segfault产生回溯将花费很长时间。

如果ab,c,等是函数并且调用堆栈为

 a b c c c c ... (thousands) ... c c (SIGSEGV)

 a b c b c ... (thousands) ... b c b c (SIGSEGV)

可能需要几分钟才能生成关联的堆栈跟踪。

如果我怀疑是这种情况,是否有办法告诉gdb / ddd快速跳到重复的开始,而不是等待它一直跟踪到整个备份?

1 个答案:

答案 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;  
}

要打印的确切帧数可能会有所不同,具体取决于无限递归的开始位置。