Wenn Logs nicht helfen und eine Anwendung sich unerwartet verhaelt, sind strace und ltrace das Sicherheitsnetz. Strace erfasst Systemaufrufe — jede Interaktion zwischen einem Prozess und dem Kernel, vom Oeffnen von Dateien ueber Netzwerkkommunikation bis zur Speicherallokation. Ltrace verfolgt Bibliotheksfunktionsaufrufe. Diese Werkzeuge decken Probleme auf, die in Logs nicht sichtbar sind: fehlende Dateien, verweigerte Berechtigungen, Netzwerk-Timeouts oder unerwartetes Systemverhalten.
strace¶
strace ls /tmp # gesamten Befehl verfolgen
strace -p 1234 # an laufenden Prozess anhaengen
strace -e open,read,write ls /tmp # nur bestimmte Syscalls filtern
strace -c ls /tmp # Zusammenfassung — Syscall-Statistiken
Beispiele¶
strace -e openat ./app 2>&1 | grep error # Fehler beim Dateioeffnen finden
strace -e write -p $(pgrep myapp) # beobachten, was der Prozess schreibt
strace -c -p $(pgrep myapp) # wo die Zeit verbraucht wird — Syscall-Profiling
strace -e network -p $(pgrep myapp) # nur Netzwerkoperationen
strace -T -e read,write -p $(pgrep myapp) # mit Zeitstempeln fuer jeden Syscall
Ein typischer Debugging-Workflow: Zuerst strace -c ausfuehren, um zu identifizieren, welche Syscalls die meiste Zeit verbrauchen, dann strace -e mit einem spezifischen Filter fuer detaillierte Analyse. Bei der Untersuchung von Netzwerkproblemen zeigt der Filter connect,sendto,recvfrom den Verbindungsaufbau und die Kommunikation.
ltrace¶
ltrace ./my-program # Library Calls verfolgen
ltrace -e malloc+free ./my-program # Speicherallokationen ueberwachen
ltrace ist nuetzlich fuer das Debugging von Memory Leaks (Verfolgung von malloc/free-Paaren), die Analyse der Leistung von Bibliotheksaufrufen und das Verstaendnis, wie eine Anwendung mit externen Bibliotheken interagiert.
- -f = Kindprozesse verfolgen (fork/exec)
- -s 1000 = laengere Strings in Argumenten anzeigen
- -T = Zeitaufwand fuer jeden Aufruf anzeigen
- In Produktion nur kurzzeitig verwenden — strace verlangsamt den verfolgten Prozess erheblich
Ultimatives Debugging¶
strace spart Stunden beim Troubleshooting, indem es genau zeigt, was ein Prozess auf Betriebssystemebene tut. Kombinieren Sie es mit perf fuer Leistungsanalyse und gdb fuer Debugging auf Code-Ebene.