Core dump présent sans backtrace

Un fichier core dump peut être présent sans qu’aucune pile d’appels (backtrace) ne soit visible immédiatement.

Un core dump contient uniquement l’état mémoire du processus au moment du crash. Pour obtenir une backtrace, il faut analyser ce dump avec un débogueur comme gdb.

Avec systemd, l’outil coredumpctl simplifie cette opération.


Pourquoi le core dump ne contient pas directement de backtrace

  • coredumpctl (composant de systemd) enregistre les dumps compressés au format .zst.
  • Le fichier est stocké sous :

/var/lib/systemd/coredump/
  • Le dump contient l’image mémoire du processus, mais pas l’analyse de la pile.
  • La backtrace est générée uniquement lorsqu’on ouvre le dump dans un débogueur.

Extraire immédiatement une backtrace

La commande suivante lance gdb automatiquement sur le dernier core dump du programme indiqué.

sudo coredumpctl debug /usr/bin/llama-server \
  --debugger-arguments="-batch -ex 'set pagination off' -ex 'info threads' -ex 'thread apply all bt full' -ex quit"

Signification des options

ÉlémentDescription
coredumpctl debugouvre le dernier dump du programme
/usr/bin/llama-serverbinaire ayant généré le crash
-batchexécution non interactive
info threadsliste les threads
thread apply all bt fullbacktrace complète de tous les threads
set pagination offdésactive la pagination
quitquitte gdb après exécution

La sortie contient la pile d’appels complète et peut être copiée dans un rapport d’incident.


Archiver un core dump

Pour conserver le dump :

sudo coredumpctl --output=/root/core.llama-server.32514 dump /usr/bin/llama-server

Le fichier sera copié depuis le stockage systemd vers le chemin indiqué.

Si le fichier est compressé :

zstd -d file.zst -o file

Exporter la backtrace dans un fichier

sudo coredumpctl debug /usr/bin/llama-server \
  --debugger-arguments="-batch -ex 'set pagination off' -ex 'info threads' -ex 'thread apply all bt full' -ex quit" \
  | tee /tmp/llama-backtrace.txt

Récupérer le contexte du journal

Les logs précédant le crash peuvent aider à comprendre l’origine du problème.

sudo journalctl -u llama-server.service -b --no-pager -n 200

Options :

OptionDescription
-uservice systemd
-bjournal du boot courant
-nnombre de lignes
--no-pagersortie directe

Checklist minimale

  1. Vérifier la présence du dump dans /var/lib/systemd/coredump.
  2. Extraire la backtrace avec coredumpctl debug.
  3. Archiver le dump si nécessaire.
  4. Collecter les logs avec journalctl.
  5. joindre backtrace et logs au rapport d’incident.

Références