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.

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.

Ligações externas Página do projeto strace Página de manual Artigo no OS Reviews sobre o strace

Categoria:Ferramentas de programação para Unix Categoria:Software de linha de comando Categoria:Software livre programado em C