Como fornecer um backtrace?

4

gnome-shell parece estar travando com resultados desagradáveis e os desenvolvedores me pediram para fornecer um backtrace, o que exatamente é um backtrace e como faço para obter o que eles precisam? Estou executando o Ubuntu GNOME 16.04 com o GNOME 3.20.

    
por muru 03.06.2016 / 00:19

2 respostas

3

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

  1. Para preparar seu sistema para fazer um, primeiro você deve certificar-se de que apport esteja desativado, pois normalmente substitui gdb . Para fazer isso, simplesmente altere a linha enabled=1 para enabled=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.

  2. 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, com gnome-shell , basta executar o seguinte para instalá-los:

    sudo apt-get install gnome-shell-dbg
    

    aqui para obter informações sobre como instalar manualmente os símbolos de depuração não disponíveis por meio de dessa maneira.

  3. Agora, você precisa verificar se tem gdb instalado:

    sudo apt-get install gdb
    

Tipo de geração 1 (aplicativo que precisa ser iniciado)

  1. Inicie o aplicativo sob o controle de gdb no Terminal (se o aplicativo precisar ser executado como root, use sudo antes do comando gdb ):

    gdb <application> 2>&1 | tee ~/gdb-<application>.txt
    
  2. 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)

  1. Encontre o PID do aplicativo:

    pidof <application>
    
  2. Inicie gdb no Terminal (se o aplicativo precisar ser executado como root, use sudo antes do comando gdb ):

    gdb 2>&1 | tee gdb-<application>.txt
    
  3. 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)

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

    
por user364819 03.06.2016 / 14:25
2

Eu não uso o gnome-shell, então estou tentando adivinhar, mas o seguinte é verdadeiro isn csh, bash e bash.

Defina o ulimit -c 5000 . Isso permitirá um despejo principal. O número define o tamanho máximo do dump. Você pode ter que variar o número para que o comando funcione. Se a janela do shell gnome fechar, o comando ulimit DEVE ser reinserido.

O Ubuntu deve realmente ativar esse recurso para as primeiras distribuições e máquinas de desenvolvimento do LTS.

Agora, execute gnome-shell e cause o despejo. Agora deve haver um arquivo principal no diretório atual.

Execute gdb $(which gnome-shell) core . Deve haver algum tipo de rastreamento de pilha que apareça. Envie-lhes rastreamento de pilha. Se o gnome-shell foi compilado com o debug -g , pode haver números de instrução e chamadas de funções no traceback.

    
por J.O. Williams 03.06.2016 / 01:16