Strace
strace | |
---|---|
![]() | |
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; há 7 meses) |
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.
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:
- Especificar um filtro de nomes syscall que devem ser rastreados (via a opção -e trace =): por nome, como clone, fork, vfork; usando um dos grupos predefinidos, como %ipc ou %file; ou (desde o strace 4.17) usando a sintaxe de expressão regular, como clock_*.
- Especificar uma lista de caminhos a serem rastreados (-P /etc/ld.so.cache, por exemplo).
- Especificar uma lista de descritores de arquivos cuja E/S deve ser despejada (opções -e read= e -e write=).
- Contar o tempo de execução e a contagem do syscall (opções -T, -c, -C e -w).
- Imprimir marcas de tempo (data) relativas ou absolutas (opções -t e -r).
- Modificar o código de retorno e de erro dos syscalls especificados e injetar sinais em sua execução (desde o strace 4.15, a opção -e injection=).
- Extrair informações sobre descritores de arquivos (incluindo sockets, opção -y).
- Imprimir rastreamentos de pilha, incluindo (desde o strace 4.21) símbolo de desmanche (opção -k).
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]
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
- ↑ «Release 6.7» (Lista de grupo de correio). 29 de janeiro de 2024. Consultado em 1 de março de 2024
- ↑ Horky, Jiri (2013). «The ioapps IO profiler and IO traces replayer». Consultado em 16 de setembro de 2013
- ↑ Waterland, Amos (2007). «The sreplay system call replayer». Consultado em 16 de setembro de 2013
- ↑ Burton, Ariel (1998). «Workload characterization using lightweight system call tracing and reexecution» (PDF). Consultado em 16 de setembro de 2013
Ligações externas
- Página do projeto strace
- Página de manual
- Artigo no OS Reviews sobre o strace