EMZETT.
Login

strace: Systemaufrufe eines Programms beobachten

Kurz: Ein Werkzeug, das anzeigt, welche Anfragen ein Programm an den Betriebssystemkern stellt, etwa Dateien öffnen, Netzwerkverbindungen aufbauen oder Speicher anfordern.

Genauer: Programme können Dateien, Netzwerk und Prozesse nur über Systemaufrufe (syscalls) nutzen. strace hängt sich an ein Programm und listet jeden dieser Aufrufe mit Parametern und Ergebnis. Man sieht also, was ein Programm wirklich tut, auch ohne Quellcode, und warum es etwa mit „Datei nicht gefunden“ abbricht.

Im Detail

Benutzung

strace ls /nichts                  # Programm unter Beobachtung starten
strace -p 1234                     # an laufenden Prozess anhängen
strace -f -o trace.txt ./programm  # auch Kindprozesse, Ausgabe in Datei
strace -e trace=openat,read ls     # nur bestimmte Aufrufe
strace -c ./programm               # Zusammenfassung: Häufigkeit und Zeit
strace -tt -T ...                  # mit Zeitstempel und Dauer

Ausgabebeispiel: openat(AT_FDCWD, "/etc/app.conf", O_RDONLY) = -1 ENOENT (No such file or directory). Das Programm sucht eine Konfigurationsdatei, die fehlt.

Typische Fälle

  • „Warum findet das Programm seine Konfiguration nicht?“ Pfade in openat/stat ansehen.
  • Programm hängt: Letzte Zeile zeigt, worauf es wartet (read auf Socket, futex, poll).
  • Langsam: -c und -T zeigen Aufrufe, die lange dauern.
  • Berechtigungsfehler: EACCES mit dem betroffenen Pfad.
  • Netzwerk: connect-Aufrufe mit Ziel-Adresse und Port.

Verwandte Werkzeuge

ltrace zeigt Aufrufe in Bibliotheken, lsof die offenen Dateien, perf und eBPF-Werkzeuge (bpftrace, perf trace) beobachten Systemaufrufe mit viel weniger Aufwand. Auf macOS entspricht dtruss, unter Windows der Process Monitor von Sysinternals.

Grenzen

strace verlangsamt das Programm spürbar, weil jeder Systemaufruf angehalten wird, und ist für Dauerbetrieb in Produktion ungeeignet. Zum Anhängen an fremde Prozesse braucht man Rechte (root oder gleicher Benutzer und ptrace-Erlaubnis). Die Ausgabe enthält oft Passwörter und Daten, die aus Aufrufparametern hervorgehen, also nicht unbedacht weitergeben.

Siehe auch: Debugger und Core-Dumps, Profiling und Flame Graphs, eBPF im Linux-Kernel, Prozesse und Signale