Come posso visualizzare il file CoreDump?


13

Quando si segnala un bug da un arresto anomalo, il bug viene reso privato e un file chiamato CoreDump.gz. La documentazione di Bug Triage dice quanto segue:

Se l'arresto anomalo ha ancora un allegato CoreDump.gz, non è stato possibile ottenere automaticamente una traccia dello stack completamente simbolica e verificare la presenza di duplicati.

Stacktrace.txt sembra leggibile da un essere umano. Come posso capire il significato di una traccia dello stack. CoreDump con CoreDump.gz non sembra leggibile dall'uomo. Che cos'è una "traccia di stack completamente simbolica"? Qual è la differenza tra una "traccia di stack completamente simbolica" Come posso visualizzare il contenuto di un file CoreDump? (provato "gatto", ma non è pulito)

Risposte:


15

Coredump.gz è la memoria (compressa) accessibile dal programma che si è bloccato. È un file binario. I coredumps sono un tesoro, con tutti i tipi di dati privati ​​da estrarre.

Coredumps può essere visualizzato eseguendo 'gdb':

gdb --core=mycoredump

Ovviamente, avrai comunque bisogno dei pacchetti di debug associati a questo core.

È quindi possibile generare uno stacktrace:

(gdb) bt

per generare uno stacktrace del thread corrente, senza risoluzione dei parametri, oppure

(gdb) thread apply all bt full

per generare uno stacktrace di tutti i thread nel coredump, con risoluzione dei parametri.

stacktrace e stacktraces completi mostrano il flusso di controllo all'interno di un programma. Per Python, la parte superiore dello stacktrace mostra la chiamata più vecchia, con la più recente in fondo; praticamente per tutto il resto, la parte superiore è la chiamata più recente e quella inferiore la più vecchia.

Una stack stack completa mostrerà non solo il flusso, ma anche i valori del parametro. Qui di solito troviamo dati privati ​​- ad esempio, supponiamo che tu veda una funzione chiamata "validatePassword" con un parametro chiamato "Password" e un valore di "MySecretPassword" ...

Stacktraces di solito sono utili solo se sono installati i pacchetti di debug (in modo che i frame dello stack possano essere risolti in qualcosa che possiamo facilmente leggere). L'analisi di uno stacktrace richiederà che si disponga dei sorgenti utilizzati per creare questa specifica istanza del programma.


CoreDump è un file binario, ma come visualizzarlo? Stacktraces sono utili solo se sono installati pacchetti di debug, perché apport lo segnala diversamente?
komputes

1
Il file CoreDump non è pensato per essere visualizzato, è pensato per il debug in gdb. Devi avere una macchina che esegue la stessa versione del software (e tutte le dipendenze) che genera il crash e che ha i pacchetti di debug, quindi puoi usare ciò che Carlos ha pubblicato sopra per ottenere la traccia dello stack.
incisore,

2
Ora come il motivo per cui è ancora rilevante per apport, è perché apport ha un sacco di "retracer" che afferrano il tuo coredump, installano i pacchetti di debug su una scatola nel controller di dominio e quindi allegano l'intero stacktract al bug report.
incisore,

Documentazione aggiuntiva: gnu.org/software/gdb/documentation
komputes

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.