Lección 24: strace y ltrace — Seguimiento de System Calls
Un programa que está trabado, lento o que se comporta de manera extraña — ¿por dónde empezar a investigar? strace es el microscopio de los ingenieros de Linux: intercepta cada system call que hace un programa y la muestra en tiempo real. ltrace hace lo mismo para las library calls. En NVIDIA, cuando
Imagina que sigues a un niño y anotas cada acción que hace: abrió la puerta, tomó un vaso, bebió agua, cerró la puerta. Eso es strace — anota exactamente cada 'acción' que el programa le pide al kernel que haga. Si el niño se queda parado un minuto entero frente a una puerta cerrada sin avanzar — eso es exactamente lo que muestra strace: 'el programa lleva un minuto bloqueado en open()'.
- strace
- Una herramienta de Linux que intercepta y muestra todas las system calls que hace un programa en tiempo real. Usa la syscall ptrace() del kernel. Esencial para depurar programas trabados, crashes y problemas de permisos.
- ltrace
- Una herramienta similar a strace pero enfocada en library calls (libc, libm, etc.) en lugar de system calls directas. Permite ver llamadas como malloc(), printf(), fopen() a nivel de biblioteca.
- system call (syscall)
- La interfaz entre los programas de usuario y el kernel. Toda operación regulada (leer un archivo, crear un socket, asignar memoria del SO) pasa por una syscall. strace las muestra todas.
- ioctl
- Una syscall genérica para control de dispositivos. El driver de CUDA expone todas las operaciones de GPU (asignación de VRAM, lanzamiento de kernels, NVLink) a través de ioctl(). strace en un programa CUDA muestra decenas de llamadas ioctl.
- ptrace
- La syscall sobre la que está construido strace. Permite que un proceso supervise, detenga e inspeccione a otro proceso. Debuggers como gdb también usan ptrace.