Strace
# Strace

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

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

Segue un tipico esempio di output del comando strace:

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

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.
* Microsoft Windows ha uno strumento simile, StraceNT, scritto da Pankaj Garg.
