Comment afficher le fichier CoreDump?

13

Lorsque vous signalez un bogue suite à un plantage, le bogue est rendu privé et contient un fichier appelé CoreDump.gz. La documentation de Bug Triage indique ce qui suit:

Si l'accident contient toujours une pièce jointe CoreDump.gz, il n'a pas été possible d'obtenir automatiquement une trace de pile entièrement symbolique et de rechercher les doublons.

Stacktrace.txt semble lisible par un humain. Comment puis-je comprendre la signification d'une trace de pile. CoreDump avec CoreDump.gz ne semble pas lisible par l'homme. Qu'est-ce qu'une "trace de pile entièrement symbolique"? Quelle est la différence entre une "trace de pile entièrement symbolique" Comment puis-je afficher le contenu d'un fichier CoreDump? (essayé 'chat', mais ce n'est pas propre)

komputes
la source

Réponses:

15

Coredump.gz est la mémoire (compressée) accessible par le programme qui s'est écrasé. Il s'agit d'un fichier binaire. Les coredumps sont un trésor, avec toutes sortes de données privées à exploiter.

Les coredumps peuvent être visualisés en exécutant 'gdb':

gdb --core=mycoredump

Bien sûr, vous aurez toujours besoin des packages de débogage associés à ce noyau.

Vous pouvez alors générer une trace de pile en:

(gdb) bt

pour générer une trace de pile du thread actuel - sans résolution de paramètre -, ou

(gdb) thread apply all bt full

pour générer une trace de pile de tous les threads dans le coredump, avec la résolution des paramètres.

stacktrace et full stacktraces montrent le flux de contrôle dans un programme. Pour Python, le haut de la trace de pile affiche l'appel le plus ancien, le plus récent en bas; pour à peu près tout le reste, le haut est l'appel le plus récent et le bas le plus ancien.

Une trace de pile complète affichera non seulement le flux, mais aussi les valeurs des paramètres. C'est là que nous trouvons généralement des données privées - par exemple, disons que vous voyez une fonction appelée "validatePassword" avec un paramètre appelé "Password" et une valeur de "MySecretPassword" ...

Les traces de pile ne sont généralement utiles que si les packages de débogage sont installés (afin que les cadres de pile puissent être résolus en quelque chose que nous pouvons facilement lire). L'analyse d'une trace de pile nécessitera que l'on ait les sources qui ont été utilisées pour construire cette instance de programme spécifique.

hggdh
la source
CoreDump est un fichier binaire, mais comment le voyez-vous? Les Stacktraces ne sont utiles que si des packages de débogage sont installés, alors pourquoi est-ce que report le signale autrement?
komputes
1
Le fichier CoreDump n'est pas destiné à être affiché, il est destiné à être utilisé pour le débogage dans gdb. Vous devez avoir une machine exécutant la même version du logiciel (et toutes les dépendances) générant le crash et ayant les packages de débogage, puis vous pouvez utiliser ce que Carlos a posté ci-dessus pour obtenir la trace de la pile.
stgraber
2
Maintenant, pour savoir pourquoi il est toujours pertinent pour répart, c'est parce que répart a un tas de "retracers" qui saisissent votre coredump, installent les packages de débogage sur une boîte dans le DC puis attachent le stacktract complet au rapport de bogue.
stgraber
Documentation supplémentaire: gnu.org/software/gdb/documentation
komputes
Documentation supplémentaire: unknownroad.com/rtfm/gdbtut/gdbtoc.html
komputes