Use o rastreamento da pilha de impressão do GDB do arquivo principal

Use o rastreamento da pilha de impressão do GDB do arquivo principal
Se você está programando há algum tempo, você se deparou com o termo dump do núcleo.

Se você olhar para a página do Core Man, ela define como despejo de núcleo como “Um arquivo que contém uma imagem da memória do processo no momento da rescisão. Esta imagem pode ser usada em um depurador (e.g.) GDB para inspecionar o estado do programa na época em que ele terminou ”.

Em termos simples, um arquivo de despejo principal é um arquivo que contém informações de memória sobre um processo quando o processo específico termina.

Existem várias razões pelas quais os processos podem travar e criar um arquivo de despejo principal. Este tutorial mostrará como usar o GDB para visualizar o arquivo de despejo principal e imprimir o rastreamento da pilha.

Etapa 1: Obtenha um depósito de núcleo

Antes de começarmos a analisar o arquivo de despejo principal, precisamos gerar um. Para fazer isso, podemos usar um programa de buggy.

Considere o buggy de código.C abaixo:

#incluir
#incluir
#incluir
int main ()
int num = 0;
int *ptr = malloc (sizeof (int));
int *Noptr = null;
para (inti = 0; i<10; i++)
if (i == 5)
*Noptr = i;

outro
*ptr = i;

printf ("i é %d \ n", i);

No código acima, criamos um loop para 0 e 10. Se o valor de I é 5, fazemos referência a um ponteiro ruim, causando assim segfault e criando um dump do núcleo.

Clang -g Bugg.C -O Buggy

Agora execute o código como:

./buggy

O código acima fornecerá a saída como:

eu é 0
Eu é 1
Eu sou 2
Eu sou 3
Eu sou 4
falha de segmentação (despejo de núcleo)

Etapa 2: Open Core Dump com GDB

Para abrir o arquivo de despejo principal com o GDB, use o comando gdb e passe o caminho para o executável e o despejo de núcleo como parâmetros como:

$ gdb buggy núcleo

Isso lançará o GDB e incluirá o dump do núcleo, conforme mostrado na saída abaixo:

Para mostrar o traço da pilha do arquivo principal, use o comando backtrace:

(GDB) Backtrace

Conclusão

Este tutorial mostrou como usar o GDB para abrir um arquivo de despejo principal e obter o rastreamento da pilha.