← retour aux snippets

strace: debugger rapide des appels système

Tracer les syscalls d'un processus, filtrer par catégorie, mesurer le temps passé par appel.

objectif

Comprendre ce que fait un binaire: fichiers ouverts, réseau, temps bloqué, erreurs EPERM/ENOENT.

code minimal

# tracer les fichiers ouverts par une commande
strace -e trace=file -o strace.log -- ls /nonexistent || true

utilisation

# attacher à un PID et tracer réseau + temps
sudo strace -p 1234 -T -e trace=network

# statistiques agrégées
strace -c -f -- curl -s https://data.pm/ > /dev/null

# voir les erreurs uniquement
strace -e trace=%file -f -qq -s 200 -- bash -c 'cat /root/secret' 2>&1 | grep -Eo 'ENOENT|EACCES|EPERM'

variante(s) utile(s)

# tracer seulement connect/send/recv
strace -e trace=connect,sendto,recvfrom -f -- myapp

# filtrer par fd
strace -e write=1 -p 1234

notes

  • nécessite des privilèges selon le ptrace_scope (voir /proc/sys/kernel/yama/ptrace_scope).
  • sur prod, limitez la durée et le volume (options -e, -c) pour réduire l’impact.
  • n’exposez pas de secrets: -s limite la taille de capture des buffers.