El comando strace nos va a permitir realizar un diagnóstico sobre la ejecución de una aplicación, generando una salida con todas las llamadas al sistema que invoque la aplicación durante su ejecución.

Por ejemplo, supongamos que necesitamos analizar el comando host (comando para resolver DNS) y que particularmente nos interesa saber qué archivo/s abre para poder devolvernos la IP dado un dominio. Para este caso, probemos con Google.

matias ~ $ host www.google.com.ar

www.google.com.ar is an alias for www.google.com.
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 64.233.163.147
www.l.google.com has address 64.233.163.99
www.l.google.com has address 64.233.163.103
www.l.google.com has address 64.233.163.104

Ahora ejecutemos el comando strace pasándole como parámetro el que acabamos de ejecutar. La salida generada es bastante extensa por lo cual para el ejemplo la recorto y dejo solamente la parte que nos interesa.

matias ~ $ strace host www.google.com.ar

futex(0x27a2c0, FUTEX_WAKE_PRIVATE, 2147483647) = 0
time(NULL) = 1258589891
open("/etc/resolv.conf", O_RDONLY|O_LARGEFILE) = 6
fstat64(6, {st_mode=S_IFREG|0644, st_size=53, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0xb7709000
read(6, "# Generated by NetworkManager\nna"..., 4096) = 53
read(6, "", 4096) = 0
close(6)

Si analizamos un poco esta salida detectamos en este caso que llama a la system call open, abre el archivo /etc/resolv.conf como readonly y lo identifica con el número 6. Después lee dos líneas del archivo 6, la primera está comentada y la segunda contiene el servidor dns al cuál le debe realizar la consulta por el dominio www.google.com.ar. Por último cierra el archivo identificado con la llamada close.

El ejemplo visto es muy sencillo, pero la idea es que a partir del mismo se imaginen otros muchísimos casos donde sería de ayuda aplicar el comando strace.