strace est un outil de déboguage sous Linux pour surveiller les appels système utilisés par un programme, et tous les signaux qu’il reçoit, similaire à l’outil « truss » sur les autres systèmes Unix. Il a été rendu possible grâce à une fonctionnalité du Noyau Linux appelée ptrace.

Utilisation basique:

Pour tracer par exemple Firefox, on lance depuis une console:

$ strace firefox

On peut également identifier le processus:

$ ps ax | grep firefox
7765 pts/1    S+     0:00 grep --color=auto firefox
28287 ?       Sl     4:32 /usr/lib/iceweasel/firefox-bin

Puis lancer strace comme ceci (Ici, Firefox/Iceweasel a le processus 28287):

$ stace -f -p 28287
(...)
[pid 28294] <... futex resumed> )       = -1 ETIMEDOUT (Connection timed out)
[pid 28294] futex(0x7f1730bf1e20, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 28294] write(22, "\372", 1)        = 1
[pid 28287] <... poll resumed> )        = 1 ([{fd=21, revents=POLLIN}])
[pid 28294] futex(0x7f1724f750cc, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1307717, {1281977398, 31056000}, ffffffff <unfinished ...>
[pid 28287] read(21, "\372", 1)         = 1
[pid 28287] read(3, 0x7f1730b9d074, 4096) = -1 EAGAIN (Resource temporarily unavailable)
[pid 28287] poll([{fd=4, events=POLLIN}, {fd=3, events=POLLIN}, {fd=8, events=POLLIN|POLLPRI}, {fd=12, events=POLLIN|POLLPRI}, {fd=13, events=POLLIN|POLLPRI}, {fd=14, events=POLLIN|POLLPRI}, {fd=24, events=POLLIN}, {fd=27, events=POLLIN}, {fd=28, events=POLLIN}, {fd=19, events=POLLIN}, {fd=10, events=POLLIN|POLLPRI}, {fd=21, events=POLLIN}], 12, 2) = 0 (Timeout)
[pid 28287] write(22, "\372", 1)        = 1
(...)

Pour rediriger la sortie dans un fichier:

$ strace -f -p 28287 &> strace_firefox.log