Comment puis-je lire un fichier de plantage depuis / var / crash

20

php-fpm s'est écrasé sur nous et a vidé un fichier dans

/var/crash/_usr_sbin_php5-fpm.1002.crash

Il y a quelques informations dans ce fichier mais ce que je recherche est dans la section intitulée CoreDump dans un format encodé en base64. Comment puis-je lire ce qui fonctionnait au moment de l'accident?

user76369
la source

Réponses:

18

Si vous ne souhaitez pas installer un tas de sous-dépendances pour l' apport-retraceoutil, vous pouvez décompresser le format de répartition dans des fichiers séparés et utiliser uniquement le CoreDumpvidage avec gdbcomme d'habitude.

  1. apport-unpack systemGeneratedCrashReportPath.crash yourNewUnpackDirectoryHere
  2. cd yourNewUnpackDirectoryHere/
  3. gdb `cat ExecutablePath` CoreDump (faites attention aux tildes ici!)
  4. bt (sortie réelle trace arrière)

    Remarque: apport-unpackse plantera parfois lors de l'opération de décompression (la répartition semble cassée tout autour ... xD), mais votre CoreDump et d'autres fichiers seront là, ignorez-le et supprimez tous les fichiers .crash /var/crashaprès les avoir déplacés ailleurs afin de permettre système pour générer de nouveaux rapports d'erreur à partir des mêmes applications.

stamster
la source
1
Fonctionné comme un charme, sans nécessiter d'installer répart-retrace , merci!
greuze
1
@digital_infinity non?! Voyez par vous-même. Il y a une grande différence entre l'écho et le chat ...
stamster
2
@stamster Vous avez raison. Désolé d'avoir raté un fichier avec un nom ExecutablePath. Je pensais que le lecteur devait y remplir le chemin exécutable.
digital_infinity
15

Il existe un outil appelé apport-retracequi lit les fichiers .crash et vous permet de le remplir avec une trace de pile entièrement symbolique ou d'exécuter une gdbsession à l'aide du vidage de mémoire. Pour démarrer une session gdb, exécutez apport-retrace -g CRASHFILE.crash. Notez que vous devez avoir installé les paquets -dbg pour obtenir une bonne trace de pile.

Cela étant dit (je ne suis pas un expert en PHP), il se peut que ce soit quelque chose que vous avez écrit dans l'un de vos fichiers qui provoque le crash.

saiarcot895
la source
4
Doesn t seem to work: # alloc -retrace -g _usr_sbin_php5-fpm.1002.crash ERREUR: le fichier de rapport ne contient pas l'un des champs obligatoires: CoreDump DistroRelease Package ExecutablePath` # grep CoreDump _usr_sbin_php5-fpm.1002.crash CoreDump: base64
user76369
10
Modifiez le fichier de plantage et ajoutez le champ "Package: 0" sous ExecutableTimestamp.
DarkNeuron