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 configzeigt, 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.