Když logy nepomáhají a aplikace se chová nevysvětlitelně, strace a ltrace jsou záchranná síť. Strace zachytává systémová volání — každou interakci procesu s kernelem, od otevírání souborů přes síťovou komunikaci po alokaci paměti. Ltrace sleduje volání knihovních funkcí. Tyto nástroje odhalí problémy, které nejsou viditelné v logách: chybějící soubory, zamítnutá oprávnění, síťové timeouty nebo neočekávané systémové chování.
strace¶
strace ls /tmp # trasuj celý příkaz
strace -p 1234 # připoj se k běžícímu procesu
strace -e open,read,write ls /tmp # filtruj jen konkrétní syscalls
strace -c ls /tmp # souhrn — statistika syscalls
Příklady¶
strace -e openat ./app 2>&1 | grep error # hledej chyby při otevírání souborů
strace -e write -p $(pgrep myapp) # sleduj co proces zapisuje
strace -c -p $(pgrep myapp) # kde tráví čas — profiling syscalls
strace -e network -p $(pgrep myapp) # pouze síťové operace
strace -T -e read,write -p $(pgrep myapp) # s časovými razítky pro každý syscall
Typický debugging workflow: nejprve strace -c pro identifikaci, které syscalls zabírají nejvíce času, poté strace -e s konkrétním filtrem pro detailní analýzu. Při sledování síťových problémů pomůže filtr connect,sendto,recvfrom, který ukáže navazování spojení a komunikaci.
ltrace¶
ltrace ./my-program # trasuj library calls
ltrace -e malloc+free ./my-program # sleduj alokace paměti
ltrace je užitečné pro debugging memory leaků (sledování malloc/free párů), analýzu výkonu knihovních volání a pochopení, jak aplikace interaguje s externími knihovnami.
- -f = sleduj i child procesy (fork/exec)
- -s 1000 = zobraz delší stringy v argumentech
- -T = zobraz čas strávený v každém volání
- V produkci používejte krátkodobě — strace značně zpomaluje trasovaný proces
Ultimátní debugging¶
strace zachrání hodiny troubleshootingu tím, že ukáže přesně, co proces dělá na úrovni operačního systému. Kombinujte s perf pro výkonnostní analýzu a gdb pro debugging na úrovni kódu.