Aula 24: strace e ltrace — rastreando system calls
Um programa que está travado, lento ou se comportando de forma estranha — por onde começar a investigar? O strace é o microscópio dos engenheiros de Linux: ele intercepta cada system call que um programa faz e mostra em tempo real. O ltrace faz o mesmo para library calls. Na NVIDIA, quando um progra
Imagine que você está seguindo uma criança e anotando cada ação que ela faz: abriu a porta, pegou o copo, bebeu água, fechou a porta. Isso é o strace — ele regista exatamente cada 'ação' que o programa pede ao kernel para fazer. Se a criança fica parada um minuto inteiro na frente de uma porta fechada sem se mexer — é exatamente isso que o strace mostra: 'o programa está bloqueado em open() há um minuto'.
- strace
- Uma ferramenta do Linux que intercepta e mostra todos os system calls que um programa faz em tempo real. Usa a syscall ptrace() do kernel. Essencial para depurar programas travados, crashes e problemas de permissão.
- ltrace
- Uma ferramenta parecida com o strace, mas focada em library calls (libc, libm etc.) em vez de system calls diretos. Permite ver chamadas como malloc(), printf(), fopen() no nível da biblioteca.
- system call
- A interface entre programas em espaço de utilizador e o kernel. Toda operação regulada (leitura de ficheiro, criação de socket, alocação de memória do SO) passa por uma syscall. O strace mostra todas.
- ioctl
- Uma syscall genérica para controle de dispositivos. O driver da CUDA expõe todas as operações de GPU (alocação de VRAM, execução de kernel, NVLink) por meio de ioctl(). O strace num programa CUDA mostra dezenas de chamadas ioctl.
- ptrace
- A syscall sobre a qual o strace é construído. Permite que um processo monitore, pare e inspecione outro processo. Debuggers como o gdb também usam ptrace.