Linux tools : strace

Una din primele scule pe care le instalez dupa instalearea unui linux este strace. Cu alternativa truss pe solaris. Strace este o scula foarte folositoare pentru “debugging”-ul instalarii diverselor servere , mai ales daca ai incredere ca softul pe care il instalezi chiar functioneaza corect si ca mingea e la tine (adica permisiuni sau configurari defectuoase). Daca nu , bagam gdb-ul, dar asta in alt post.

Strace / Truss sunt programe ce urmaresc system call-urile unui alt program. Un system call (syscall) este mecanismul prin care programele cer resurse sau servicii de la systemul de operare. In ceneral syscall-urile sunt impachetate in niste functii , si grupate in librarii. In cazul c-ului pe linux de exemplu acesta librarie este foarte cunoscuta glibc/libc, in care vom gasi functiile de citire si scriere pe disc, de spawnare de noi procese, etc. Exemple de syscalls sunt open, close, write, fork, clone, vfork.

La ce e folositor? Stim ca de exempluin cazul in care avem nevoie de access la un fisier, sau un socket undeva se va executa un open pentru a accesa resursa. In strace/truss vom putea vedea codul pe care il intoarce respectivul syscall, si vom putea actiona in consecinta. Unul din trucurile pe care le folosesc este se configurez minim un apache (un singhur child, un singur client, etc) si sa execut pe procesul apache principal un strace -ff (follow forks). Apoi apeland aplicatia web primita mostenire si nedocumentata vom putea vedea ce resursa incearca sa apeleze si unde da eroarea. In mediile chrootate (de obicei folosesc apache si mod security sa chrootez threadurile apache intr-un director “safe”) un astfel de ajutor poate fi foarte folositor. Nu odata am putus sa-mi dau astfel seama ca am configurat mini_sendmail gresit in chroot sau am uitat sa mut in chroot /etc/passwd sau biblioteci de care soft-ul rulat “sub apache” si scris in php/perl/python avea nevoie sa execute corect diverse chestii (xml in special).

O scula asemanatoare este ltrace (pe solaris tot truss este “the one”) e o scula asemanatoare cu strace, in sensul ca tot apeluri urmareste, dar apelurile catre librarii. Este folositor mai ales combinat cu ldd pentru ca ne da o idee destul de clara asupra modului cum a fost gandita aplicatia si ce librarii foloseste cat sa ne descurcam sa o instalam sau sa dam de cap anumitor probleme fara sa trebuiasca sa intram in codul sursa.

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.