Strace

strace
software
Logo
Logo
GenereDebugger
SviluppatorePaul Kranenburg, Dmitry Levin
Ultima versione6.10 (21 luglio 2024)
Sistema operativoLinux
FreeBSD (non in lista)
LinguaggioC
LicenzaBSD
(licenza libera)
Sito webstrace.io/
Modifica dati su Wikidata · Manuale

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:

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

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

  1. ^ (EN) dtruss(1m) OS X Manual Page, su developer.apple.com, 17 giugno 2005. URL consultato il 29 marzo 2013.
  2. ^ (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

Collegamenti esterni

  • (EN) Pagina man, su linuxmanpages.com.
  • (EN) Articolo di OS Reviews su strace, su osreviews.net.
  • (EN) Pagina del progetto (Sourceforge), su sourceforge.net.
  Portale Informatica
  Portale Software libero