Core dump em C

Estaremos abordando aqui o que é um core dump, como trabalhar com ele.

O Core Dump é gerado através da saída anormal do programa.

O core dump, é criado, como um mapa de memória no momento da excessão, com isso é possivel debugar e identificar o problema no momento da excessão.

Iremos abordar um pouco deste processo.

Ativando o Core Dump

Em alguns sistemas operacionais, o core dump vem desativado.

Para ativa-lo, é necessário digitar o seguinte comando:

ulimit -c unlimited

comando ativa o core dump, com tamanho ilimitado.

Criando um programa exemplo

Para demonstrar isso criamos um programa que gera esta excessão.

Fonte teste.c, é conforme se segue:

#include<stdio.h>
#include<string.h>

void main(){
        char *info;
        memset(info,'\0',sizeof(info));
        printf("String:%s",info);

}

Como podemos ver a variavel, info, nunca foi inicializada, e quando chamada pelo memset, irá gerar o core dump.

Arquivo Makefile, é como se segue:

all: compile

compile:
        gcc teste.c -o teste

Ao realizar a operação, podemos verificar a geração do erro.

geração do arquivo core

Redirecionando arquivo core dump

Conforme o post deste site:

https://www.baeldung.com/linux/managing-core-dumps

Alias ótimo site, podemos redirecionar o caminho default do core, através do seguinte comando.

 sudo sysctl -w kernel.core_pattern="./%e_core_dump.%p"

Permitindo gerar o dump, no local que bem preferir.

Lendo arquivo Core Dump

O nosso amigo GCC é o programa que irá ler o core dump, para tanto é necessário, abrir o gcc com o core dump. Assim como se estivesse debugando um programa tradicional.

gcc -c <coredump file>

Para saber mais sobre o GCC leia este outro post.

http://maurinsoft.com.br/index.php/2021/08/20/criando-aplicacao-debugavel-no-linux/