No GDB, como posso ir diretamente para o quadro de pilha de chamadas mais alto?

8

Eu tenho um programa em C que seg falha depois de descer profundamente em uma confusão recursiva infinita. O rastreamento do processo no GDB é inútil porque o quadro de pilha de chamadas tem pelo menos 1000 quadros, e as chamadas de função repetidas são uma série de quatro chamadas de função recursiva comuns (portanto, pontos de interrupção parecem inúteis). Chamadas repetidas para backtrace apenas lêem os quatro nomes de função, repetidas vezes. Ocorreu-me que fazer 'up' 'up' 'up' ... me levaria mais alto, para que eu pudesse ver onde esse padrão começou a ocorrer, mas parece que seria mais eficiente começar da primeira chamada. empilhe o frame e desça, porque meu palpite é que a recursão infinita começa no início do processo. Se a pilha de chamadas tivesse N quadros totais, eu sei que poderia fazer

gdb>> up N

para chegar ao topo da pilha (o enésimo quadro), mas o problema é que eu não sei N. Existe um comando para encontrar o número total de quadros na pilha de chamadas? Ou existe um comando embutido do GDB para pular para o quadro mais alto? Ocorreu-me que o quadro mais alto deveria ser a função main () - posso aproveitar esse conhecimento para chegar ao quadro mais alto?

    
por dandrews 08.07.2011 / 17:44

3 respostas

8

Nos meus testes, o uso de 'up' com um número muito grande resultou na exibição do quadro superior, por exemplo,

(gdb) up 99999
#58 0x0000000000442fb4 in main ()
    
por 08.07.2011 / 18:16
19

Você pode especificar 'bt' com um número negativo para começar do quadro superior:

bt -20

Você pode usar 'frame' (ou 'f') para ir diretamente para o quadro que deseja.

    
por 08.03.2013 / 18:45
1

fr 0 leva você ao quadro de pilha mais alto. fr significa frame.

    
por 24.03.2017 / 23:29

Tags