strace
strace software | |
---|---|
Genere | Debugger |
Sviluppatore | Paul Kranenburg, Dmitry Levin |
Ultima versione | 6.11 (15 settembre 2024) |
Sistema operativo | Linux FreeBSD (non in lista) |
Linguaggio | C |
Licenza | BSD (licenza libera) |
Sito web | strace.io/ |
strace è un'utility di debugging per Linux e altri sistemi Unix-like che esamina le chiamate di sistema usate da un programma e tutti i segnali che esso riceve, analogamente all'utility truss presente in altri sistemi Unix. Ciò è reso possibile da una funzionalità chiamata ptrace.
Cygwin fornisce un'utility simile.
Utilizzo
[modifica | modifica wikitesto]L'uso più comune è quello di far partire un programma usando strace, che stampa a video la lista delle chiamate di sistema fatte dal programma. Ciò è utile se il programma va frequentemente in crash, o non tiene il comportamento atteso; per esempio l'uso di strace può rivelare che il programma tenti di accedere ad un file che non esiste o è illeggibile.
In alternativa, si usa il flag -p per associare strace ad un processo già in esecuzione. Ciò è utile se un processo ha smesso di rispondere, e può rivelare, ad esempio, che il processo è bloccato in attesa di una connessione alla rete.
Siccome strace mostra soltanto i dettagli delle chiamate di sistema, non può essere utilizzato per individuare tutti i problemi che può rivelare un debugger come GNU Debugger (gdb). Però, esso è più facile da usare di un debugger, ed è uno strumento estremamente utile per gli amministratori di sistema.
Output di esempio
[modifica | modifica wikitesto]Segue un tipico esempio di output del comando strace:
open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3 fstat64(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 fcntl64(3, F_GETFD) = 0x1 (flags FD_CLOEXEC) getdents64(3, /* 18 entries */, 4096) = 496 getdents64(3, /* 0 entries */, 4096) = 0 close(3) = 0 fstat64(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f2c000 write(1, "autofs\nbackups\ncache\nflexlm\ngames"..., 86autofsA
Il frammento sopra è solo una piccola parte dell'output di strace quando viene eseguito sul comando ls. Mostra che la directory di lavoro viene aperta e ne viene letto il contenuto. La lista di file risultante è scritta sullo standard output.
Altri strumenti
[modifica | modifica wikitesto]I diversi sistemi operativi offrono altri strumenti simili e talvolta più potenti, per esempio:
- Linux ha ltrace, che può registrare le chiamate al sistema e alle librerie
- Le distribuzioni Linux dopo il 2006 hanno SystemTap
- Linux ha anche trace-cmd e KernelShark, che estendono le funzioni di ftrace
- Solaris ha truss e DTrace
- AIX fornisce il comando truss
- HP-UX offre il comando tusc
- FreeBSD offre il comando truss, ktrace e DTrace
- NetBSD fornisce ktrace e DTrace
- OpenBSD usa ktrace e kdump
- macOS fornisce ktrace (fino alla versione 10.4), DTrace (da Solaris) e dtruss dalla versione 10.5 e successive.[1]
- Microsoft Windows ha uno strumento simile, StraceNT, scritto da Pankaj Garg.[2]
Note
[modifica | modifica wikitesto]- ^ (EN) dtruss(1m) OS X Manual Page, su developer.apple.com, 17 giugno 2005. URL consultato il 29 marzo 2013.
- ^ (EN) StraceNT - A System Call Tracer for Windows, su intellectualheaven.com. URL consultato il 29 marzo 2013 (archiviato dall'url originale l'11 maggio 2013).
Voci correlate
[modifica | modifica wikitesto]Collegamenti esterni
[modifica | modifica wikitesto]- (EN) Pagina man, su linuxmanpages.com.
- (EN) Articolo di OS Reviews su strace, su osreviews.net.
- (EN) Pagina del progetto (Sourceforge), su sourceforge.net.