Um backtrace mostra uma lista de funções ativas de um aplicativo. Como as funções são aninhadas umas dentro das outras quando são chamadas, o aplicativo deve registrar onde deixou uma função para entrar em outra dentro dela. Isso é feito na pilha, e depois descarregamos a pilha para o backtrace.
Preparação
-
Para preparar seu sistema para fazer um, primeiro você deve certificar-se de que
apport
esteja desativado, pois normalmente substituigdb
. Para fazer isso, simplesmente altere a linhaenabled=1
paraenabled=0
no arquivo/etc/default/apport
(depois de ter feito o backtrace manualmente, você deve reativar o suporte revertendo as alterações para o arquivo), então reinicie o seu arquivo. máquina. -
Agora você precisa ter certeza de que os símbolos de dubug relevantes estão instalados, para fazer isso na maioria dos pacotes, basta adicionar o
-dbg
no final, por exemplo, comgnome-shell
, basta executar o seguinte para instalá-los:sudo apt-get install gnome-shell-dbg
Vá aqui para obter informações sobre como instalar manualmente os símbolos de depuração não disponíveis por meio de dessa maneira.
-
Agora, você precisa verificar se tem
gdb
instalado:sudo apt-get install gdb
Tipo de geração 1 (aplicativo que precisa ser iniciado)
-
Inicie o aplicativo sob o controle de
gdb
no Terminal (se o aplicativo precisar ser executado como root, usesudo
antes do comandogdb
):gdb <application> 2>&1 | tee ~/gdb-<application>.txt
-
Em seguida, insira as seguintes linhas após cada uma você deverá pressionar ENTER (após
run
você pode inserir quaisquer argumentos necessários que você precise executar com a aplicação):handle SIG33 pass nostop noprint set pagination 0 run
Agora, veja a seção Etapas finais .
Tipo de geração 2 (aplicativo não em execução no momento)
-
Encontre o PID do aplicativo:
pidof <application>
-
Inicie
gdb
no Terminal (se o aplicativo precisar ser executado como root, usesudo
antes do comandogdb
):gdb 2>&1 | tee gdb-<application>.txt
-
Execute o seguinte como previamente instruído (pressionando ENTER após cada linha):
handle SIG33 pass nostop noprint set pagination 0 attach <PID> continue
Agora, veja a seção Etapas finais .
Tipo de geração 3 (backtrace do dump principal)
-
Carregue o dump principal em
gdb
:gdb -c <coreDump> 2>&1 | tee gdb-<program>.txt
Etapas finais
Se você usou a geração tipo 1 ou 2, então poderá fazer o que precisar com o aplicativo para reproduzir o erro que está relatando. Depois que você terminar, se o programa não travar, pressione CTRL + C e, em seguida, execute as seguintes linhas como com o anterior fornecido (se o programa travar você ainda precisa executar as seguintes linhas para obter o backtrace):
backtrace full
info registers
x/16i $pc
thread apply all backtrace
Quit
Agora você tem seu backtrace, anexe-o ao seu relatório de bug (o arquivo ~/gdb-<application>.txt
).
Fonte: Wiki do Ubuntu: Backtrace