Où rechercher le fichier principal généré par le crash d'une application Linux?

18

J'essaie de trouver la raison du plantage d'une de mes applications Linux. Mais je ne sais pas où va le cœur.

cat /proc/sys/kernel/core_pattern
core.%e.%p

Une idée?

dcds
la source

Réponses:

22

Le vidage de mémoire est écrit dans le répertoire courant du processus au moment du crash.

Bien sûr, les vidages mémoire doivent être activés, par défaut ceux-ci sont généralement désactivés. Vérifiez la sortie de ulimit -c, si c'est 0, aucun fichier de base ne sera écrit. Exécutez ulimit -c unlimitedpour activer les vidages de mémoire; il s'agit d'un paramètre par processus hérité des processus démarrés par ce processus.

Si un vidage de mémoire devait avoir été généré mais que vous ne savez pas où, vous pouvez recommencer le processus (s'il le fait sans se bloquer immédiatement), puis vérifier son répertoire de travail en faisant ls -l /proc/$pid/cwd$pidest l'ID de processus du processus. Ce lien pointera vers le répertoire de travail actuel de ce processus. Il y a de fortes chances que le vidage de mémoire soit là. Sinon, vous devez exécuter findsur l'ensemble du système ...

gémir
la source
3
J'ai vérifié ulimit -c, c'est illimité, mais il n'y a toujours rien dans le répertoire de processus actuel.
dcds
1
Il est possible que l'application a détecté une erreur fatale lui - même et abandonnée, à savoir ce n'est pas un accident « réel », comme une violation de segmentation ou similaire, ce qui pourrait générer une décharge de base. Comme vous ne donnez aucune information sur l'application, il n'est pas possible de le savoir.
wurtel
1
C'est définitivement un crash parce que je fais sciemment un pointeur nul.
dcds
20

Les systèmes utilisant systemd sont généralement configurés pour vider les cœurs vers

/var/lib/systemd/coredump/

Vous pouvez utiliser la coredumpctlcommande pour répertorier les vidages mémoire. Voir aussi no-more-coredumps-after-migration-to-systemd

StefanQ
la source