web-dev-qa-db-fra.com

Trouver quel programme a causé un fichier de vidage mémoire

J'ai récemment effectué une installation intensive de programmes/packages, donc je ne peux pas dire avec certitude lequel des programmes nouvellement installés (ou des anciens programmes) a provoqué l'apparition d'un fichier core dans mon dossier de départ. C'est un serveur, alors il vaut mieux que je trouve toutes les sources possibles d'instabilité sur la machine.

19
Desmond Hume

Vous pouvez simplement utiliser le programme file pour les identifier:

Par exemple

# file /var/core/core
/var/core/core:     ELF 64-bit MSB core file SPARCV9 Version 1, from 'crs_stat.bin'
33
Benj

Utiliser souvent le programme de fichiers sur le fichier principal montrera l'exécutable erroné, comme expliqué par @Benj dans la réponse acceptée (code de la réponse de Benj):

# file /var/core/core
/var/core/core:     ELF 64-bit MSB core file SPARCV9 Version 1, from 'crs_stat.bin'

Cependant, vous pouvez parfois recevoir une plainte concernant "trop ​​de sections d'en-tête de programme":

core.some-lib.nnnn.nnnn: ELF 64-bit LSB  core file x86-64, version 1 (SYSV), too many program header sections (1850)

Dans ce cas, vous pouvez essayer quelques alternatives:

  • Tail les dernières chaînes du corefile (l'application était environ 25 en arrière pour moi): strings core.some-lib.nnnn.nnnn | tail -50
  • Utilisez gdb lui-même: gdb -c core.some-lib.nnnn.nnnn Cela vous dira souvent quelque chose comme ceci: Core was generated by '/usr/local/bin/some-executable'
2
rholmes

vous pouvez naviguer dans le répertoire où se trouve le fichier core.pid et exécuter gdb core core.pid

0
SuperChekkan