Se eu executar um programa a partir do shell, e ele segfaults:
$ buggy_program
Segmentation fault
No entanto, há uma maneira de conseguir que os programas imprimam um backtrace, talvez executando algo como isto:
$ print_backtrace_if_segfault buggy_program
Segfault in main.c:35
(rest of the backtrace)
Também prefiro não usar strace ou ltrace para esse tipo de informação, pois elas serão impressas de qualquer maneira ...
fonte
Desculpe vir aqui 2 anos depois ... tropeçou enquanto procurava outra coisa. Adicionando isso para completar.
1) Embora eu ache a resposta aceitável ótima, ela requer gdb. O método que eu estou familiarizado usa libSegFault.so.
Se você executar seu aplicativo com
Você receberá um relatório com backtrace, bibliotecas carregadas, etc.
2)
catchsegv
Também está disponível um script de wrapper que tentaria usaraddr2line
para converter endereços em nome do arquivo + número da linha.Essas são soluções muito mais leves que os arquivos principais ou o gdb (bom para sistemas embarcados, por exemplo)
fonte
LD_PRELOAD=libSegFault.so
bem se estiver no caminho dl.Você precisa do amigo de todos, GDB
Depois de carregar seu corefile, o comando 'backtrace' (pode ser abreviado para bt) fornecerá a pilha de chamadas atual. Se você executar seu programa a partir do gdb, poderá definir pontos de interrupção arbitrários e examinar o conteúdo da memória, etc.
fonte
catchsegv
Foi mencionado em outra resposta (mas de forma alguma focada). É uma ferramenta útil que acompanha o projeto glibc. Ele fornecerá um backtrace (e outras informações úteis sobre depuração) apenas se um programa realmente fizer o segfault.
Existe uma boa redação aqui .
Você pode incluí-lo em seus próprios scripts como achar melhor.
fonte
O Ubuntu (como um projeto) usa o Apport para fazer isso. Você pode ver como eles fizeram isso.
https://wiki.ubuntu.com/Apport
fonte
/proc/sys/kernel/core_pattern
Aqui está uma variante ligeiramente modificada do script de Kyle Brandt. É aprimorado das seguintes maneiras:
Roteiro:
fonte
-ex
.gdb ... -ex 'set pagination off' -ex backtrace -ex quit