strace ist ein Diagnose-Werkzeug für Linux, das die Systemaufrufe (Syscalls) eines Prozesses aufzeichnet — also die Schnittstelle zwischen Programm und Kernel. Damit lässt sich sichtbar machen, welche Dateien ein Programm öffnet, welche Netzwerkverbindungen es aufbaut und warum es beim Start scheitert.

Grundlagen

strace ./programm                  # Syscalls eines Programms verfolgen
strace -f ./programm               # auch Kindprozesse (fork) verfolgen
strace -p 1234                     # an laufenden Prozess anhängen
strace -o log.txt ./programm       # Ausgabe in Datei schreiben

Jede Zeile zeigt einen Systemaufruf mit Argumenten und Rückgabewert, zum Beispiel openat(AT_FDCWD, "/etc/passwd", O_RDONLY) = 3 — Datei geöffnet mit Deskriptor 3. Ein Rückgabewert von -1 ENOENT bedeutet: Die Datei existiert nicht, häufig die Ursache für Startfehler.

Gezielt filtern

strace -e trace=open,read,close ./programm   # nur bestimmte Syscalls
strace -e trace=network curl https://example.org   # nur Netzwerk-Syscalls
strace -c ./programm                   # Zusammenfassung als Statistik
strace -t -s 200 ./programm           # Zeitstempel + längere Strings

Mit -e trace= lassen sich Syscall-Klassen wie file, network, process, signal oder einzelne Namen auswählen. -c druckt eine Tabelle mit Anzahl, Fehlern und Zeit je Syscall, -t ergänzt Zeitstempel und -s begrenzt die angezeigte String-Länge.

Praxis-Tipps

  • Der Klassiker: strace -e trace=open,openat ./programm 2>&1 | grep -i config zeigt, welche Konfigurationsdatei ein Programm sucht.
  • Für laufende Dienste sudo strace -p <pid> verwenden — der Prozess läuft danach normal weiter (Strg-C löst ab).
  • strace nutzt ptrace und verlangsamt das Programm erheblich — gezielt einsetzen.

Verwandte Grundlagen: Prozess, Thread, GDB-Befehle, Valgrind-Befehle, objdump-Befehle.