paulo1205
(usa Ubuntu)
Enviado em 03/08/2018 - 02:48h
O Thihup já deu o caminho das pedras. O arquivo
core fica gravado no diretório corrente, se você tiver permissão de gravar nele e se o tamanho do arquivo estiver dentro dos limites permitidos (que você pode ajustar no
shell por meio do comando
ulimit).
É possível interceptar ou ignorar o
SIGSEGV (veja documentação de
sigaction()). No entanto, eu acho que isso tenderia a não ser muito útil, especialmente se a falha de segmentação ocorrer durante a manipulação de dados locais de uma função, a outros objetos na pilha ou a áreas dinamicamente alocadas cujos ponteiros estejam num escopo que não seja visível pela função tratadora do sinal.
Eu realmente penso que usar o
gdb é uma boa, quer com um
core dump de uma execução anteriormente abortada, quer com a execução corrente e dados correntes. Entretanto, há outras possibilidades também, cuja utilidade pode variar, dependendo do caso. Valgrind é uma delas. Outras incluem
strace,
ltrace,
dtrace e até mesmo programas que façam diagnóstico do ambiente, em lugar de um processo, tais como
ps,
top,
tcpdump e várias outras.