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).
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:
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