Leçon 24 : strace et ltrace — Traçage des appels système
Un programme bloqué, lent ou qui se comporte bizarrement — par où commencer l'investigation ? strace est le microscope des ingénieurs Linux : il intercepte chaque appel système effectué par un programme et l'affiche en temps réel. ltrace fait la même chose pour les appels de bibliothèque. Chez NVIDI
Imagine que tu suis un enfant et que tu notes chaque action qu'il fait : a ouvert la porte, a pris un verre, a bu de l'eau, a fermé la porte. C'est ça, strace — il note exactement chaque « action » que le programme demande au noyau d'exécuter. Si l'enfant reste une minute entière devant une porte fermée sans bouger — c'est exactement ce que strace montre : « le programme est bloqué sur open() depuis une minute ».
- strace
- Un outil Linux qui intercepte et affiche en temps réel chaque appel système effectué par un programme. Utilise le syscall ptrace() du noyau. Essentiel pour déboguer les programmes bloqués, les plantages et les problèmes de permissions.
- ltrace
- Similaire à strace, mais se concentre sur les appels de bibliothèque (libc, libm, etc.) plutôt que sur les appels système directs. Permet de voir des appels comme malloc(), printf(), fopen() au niveau de la bibliothèque.
- appel système (syscall)
- L'interface entre les programmes de l'espace utilisateur et le noyau. Chaque opération réglementée (lire un fichier, créer un socket, allouer de la mémoire OS) passe par un syscall. strace les affiche tous.
- ioctl
- Un syscall générique de contrôle de périphérique. Le pilote CUDA expose toutes les opérations GPU (allocation de VRAM, lancement de kernel, NVLink) via ioctl(). strace sur un programme CUDA affiche des dizaines d'appels ioctl.
- ptrace
- Le syscall sur lequel strace est construit. Permet à un processus de surveiller, arrêter et inspecter un autre processus. Les débogueurs comme gdb utilisent aussi ptrace.