Pode haver uma maneira melhor, mas isso automatiza isso.
Coloque o seguinte em ~/backtrace
:
backtrace
quit
Coloque isso em um script chamado seg_wrapper.sh
em um diretório em seu caminho:
#!/bin/bash
ulimit -c unlimited
"$@"
if [[ $? -eq 139 ]]; then
gdb -q $1 core -x ~/backtrace
fi
O comando ulimit
faz com que o núcleo seja descartado. "$@"
são os argumentos dados ao script, portanto, seria seu programa e seus argumentos. $?
detém o status de saída, 139 parece ser o status de saída padrão da minha máquina para um segfault.
Para gdb
, -q
significa silêncio (sem mensagem de introdução) e -x
indica gdb
para executar comandos no arquivo fornecido a ele.
Uso
Então, para usá-lo, você apenas faria:
seg_wrapper.sh ./mycommand and its arguments
Atualizar
Você também pode escrever um manipulador de sinal que faça isso, veja este link .