Strace

strace
AutorPaul Kranenburg
DesenvolvedorDmitry Levin
Lançamento estável
6.7 / 29 de janeiro de 2024; há 2 anos (2024-01-29)
Repositório
Escrito emC
Sistema
operacional
Linux
PlataformaAArch64, 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
Disponível emInglês
TipoDepuração
LicençaBSD
Websitestrace.io

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.

Uso e características

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.

Exemplos

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.

Referências

  1. ↑ «Release 6.7» (Lista de grupo de correio). 29 de janeiro de 2024. Consultado em 1 de março de 2024
  2. ↑ Horky, Jiri (2013). «The ioapps IO profiler and IO traces replayer». Consultado em 16 de setembro de 2013
  3. ↑ Waterland, Amos (2007). «The sreplay system call replayer». Consultado em 16 de setembro de 2013 [ligação inativa]
  4. ↑ Burton, Ariel (1998). «Workload characterization using lightweight system call tracing and reexecution» (PDF). Consultado em 16 de setembro de 2013

Ligações externas