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.
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.