Autor | Paul Kranenburg |
Desenvolvedor | Dmitry Levin |
Plataforma | AArch64, DEC Alpha, ARC, ARM EABI/OABI, AVR32, Blackfin, HP PA-RISC, IA-32, IA-64, Motorola 68000, Imagination META, MicroBlaze, MIPS, Nios II, OpenRISC, POWER 32/64 bit, RISC-V, z/Architecture 31/64 bit, SuperH 32/64 bit, SPARC 32/64 bit, TILE, TILEPro, TILE-Gx, x86-64, x32 ABI, Xtensa |
Versão estável | 6.7[1] (29 de janeiro de 2024 ) |
Idioma(s) | Inglês |
Escrito em | C |
Sistema operacional | Linux |
Gênero(s) | Depuração |
Licença | BSD |
Página oficial | strace |
strace é um utilitário de diagnóstico, depuração e de instrução do espaço de usuário para Linux. Ele é usado para monitorar e interferir com interações entre processos e o núcleo do Linux, que incluem chamadas do sistema, entregas de sinais e mudanças no estado do processo. A operação do strace é possibilitada pelo recurso do núcleo conhecido como ptrace.
Alguns sistemas do tipo Unix fornecem outras ferramentas de diagnóstico semelhantes à strace, como truss.
O uso mais comum é iniciar um programa usando strace, que imprime uma lista de chamadas do sistema feitas pelo programa. Isso é útil se o programa falhar continuamente ou não se comportar como esperado. Por exemplo, usando o strace pode revelar que o programa está tentando acessar um arquivo que não existe ou não pode ser lido.
Uma aplicação alternativa é usar o sinalizador -p para anexar a um processo em execução. Isso é útil se um processo parou de responder e pode revelar, por exemplo, que o processo está bloqueando ao tentar estabelecer uma conexão de rede.
Entre outros recursos, o strace permite o seguinte:
O strace suporta a decodificação de argumentos de algumas classes de comandos ioctl, como BTRFS_*, V4L2_*, DM_*, NSFS_*, MEM*, EVIO*, KVM_* e vários outros.
Como o strace apenas detalha as chamadas do sistema, ele não pode ser usado para detectar tantos problemas quanto um depurador de código como o GNU Debugger (gdb). Ele é, no entanto, mais fácil de usar do que um depurador de código e é uma ferramenta extremamente útil para administradores de sistema. Ele também é usado por pesquisadores para gerar rastreamentos de chamadas do sistema para posterior replay de chamada do sistema.[2][3][4]
Este é um exemplo de saída típica do comando strace:
open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
fcntl64(3, F_GETFD) = 0x1 (flags FD_CLOEXEC)
getdents64(3, /* 18 entries */, 4096) = 496
getdents64(3, /* 0 entries */, 4096) = 0
close(3) = 0
fstat64(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f2c000
write(1, "autofs\nbackups\ncache\nflexlm\ngames"..., 86autofsA
O fragmento acima é apenas uma pequena parte da saída do strace quando executado no comando 'ls'. Ele mostra que o diretório de trabalho atual é aberto, inspecionado e seu conteúdo é recuperado. A lista resultante de nomes de arquivos é gravada na saída padrão.