strace è un tool molto utile per il debugging, eseguendo un "Signal Trace" ("Tracciamento dei Segnali", ndt). Il suo utilizzo permette di eseguire un programma tenendo sotto controllo tutti i segnali e le chiamate di sistema. In questo modo si possono ricercare eventuali errori e capire dove il programma non funziona. Strace è anche in grado di "attaccarsi" a un processo già in esecuzione e tracciarne i segnali.
strace [opzioni]
-o [file_output] [nome_comando]
esegue uno strace di un programma registrando l'output in un file, permettendo cosi una comoda analisi a posteriori
-p PID
collega strace ad un processo già in corso inserendo il PID
Vediamo un esempio. strace -o debug.txt netstat scrive su debug.txt l'output del tracing di netstat. Attenzione! Strace produce una grande quantità di output e rallenta notevolmente la macchina: la chiamata appena effettuata produce 235 righe di output in meno di 2 secondi, ma si può arrivare tranquillamente anche oltre 5000. Per questo è sempre utile stampare l'output in un file.
Spesso un programma non funziona perchè non trova certi file o librerie o non ha i permessi adeguati sugli stessi. Per rimediare basta fare | grep ENOENT: indica che non è riuscito a trovare un file o una directory.
Strumenti e indicazioni su come eseguire il debugging delle applicazioni: strace, lsof, ldd.