Como vejo o arquivo CoreDump?

13

Ao relatar um bug de uma falha, o bug é tornado privado e um arquivo chamado CoreDump.gz. A documentação da triagem de erros diz o seguinte:

Se a falha ainda tiver um anexo CoreDump.gz, não foi possível obter automaticamente um rastreamento de pilha totalmente simbólico e verificar se há duplicatas.

Stacktrace.txt parece legível por um ser humano. Como posso entender o significado de um rastreamento de pilha. O CoreDump no CoreDump.gz não parece legível por humanos. O que é um "rastreamento de pilha totalmente simbólico"? Qual é a diferença entre um "rastreamento de pilha totalmente simbólico" Como visualizo o conteúdo de um arquivo CoreDump? (tentei 'gato', mas não está limpo)

komputes
fonte

Respostas:

15

Coredump.gz é a memória (compactada) acessível pelo programa que travou. É um arquivo binário. Os Coredumps são um tesouro, com todos os tipos de dados particulares a serem extraídos.

Coredumps podem ser visualizados executando 'gdb':

gdb --core=mycoredump

Obviamente, você ainda precisará dos pacotes de depuração associados a esse núcleo.

Você pode, então, gerar um rastreamento de pilha:

(gdb) bt

para gerar um rastreamento de pilha do encadeamento atual - sem resolução de parâmetro - ou

(gdb) thread apply all bt full

para gerar um rastreamento de pilha de todos os encadeamentos no coredump, com resolução de parâmetro.

o stacktrace e o stacktraces completo mostram o fluxo de controle dentro de um programa. Para Python, a parte superior do rastreamento de pilha mostra a chamada mais antiga, com a mais recente na parte inferior; para praticamente todo o resto, a parte superior é a chamada mais recente e a parte inferior a mais antiga.

Um rastreamento de pilha completo não apenas mostrará o fluxo, mas também os valores do parâmetro. É aqui que geralmente encontramos dados particulares - por exemplo, digamos que você veja uma função chamada "validatePassword" com um parâmetro chamado "Senha" e um valor de "MySecretPassword" ...

Os rastreamentos de pilha geralmente são úteis apenas se os pacotes de depuração estiverem instalados (para que os quadros de pilha possam ser resolvidos em algo que possamos ler facilmente). A análise de um rastreamento de pilha exigirá que você tenha as fontes usadas para criar essa instância específica do programa.

hggdh
fonte
CoreDump é um arquivo binário, mas como você o vê? Stacktraces são úteis apenas se pacotes de depuração estiverem instalados; por que o apport o informa de outra forma?
komputes
1
O arquivo CoreDump não deve ser exibido, deve ser usado para depuração no gdb. Você precisa ter uma máquina executando a mesma versão do software (e todas as dependências) gerando a falha e tendo os pacotes de depuração; então, você pode usar o que Carlos postou acima para obter o rastreamento da pilha.
stgraber
2
Agora, sobre o motivo pelo qual ainda é relevante para o apport, é porque o apport tem vários "retracers" que agarram o seu coreedump, instalam os pacotes de depuração em uma caixa no DC e anexam todo o stacktract ao relatório de erros.
stgraber
Documentação adicional: gnu.org/software/gdb/documentation
komputes
Documentação adicional: unknownroad.com/rtfm/gdbtut/gdbtoc.html
komputes