strace é um software de código aberto e livremente distribuído projetado para desenvolvedores e administradores de sistemas, fornecendo um rastreador de chamada de sistema implementado em C e projetado para funcionar exclusivamente em sistemas operacionais GNU / Linux.
O programa é um utilitário de depuração, instrução e diagnóstico muito útil que pode reunir todas as chamadas do sistema geradas por um programa ou um processo e imprimir um rastreamento. É um programa de linha de comando que só pode ser usado a partir de um ambiente de console ou através de um aplicativo de emulador de terminal.
A ferramenta pode ser usada por diagnósticos, solucionadores de problemas, bem como administradores de sistemas que desejam uma solução inestimável para resolver problemas com programas de código fechado. Está escrito por Dmitry V. Levin, Roland McGrath e Wichert Akkerman.
Opções de linha de comando
Como qualquer outro software de linha de comando, strace oferece uma ampla variedade de opções de linha de comando que permitem ao usuário usar facilmente todas as suas funcionalidades e recursos para realizar suas tarefas. Todas as suas opções de linha de comando podem ser visualizadas instantaneamente executando o & lsquo; strace --help & rsquo; comando.
Entre as opções de linha de comando mais interessantes, podemos mencionar o suporte para tempos de contagem, chamadas e erros para cada syscall, suporte para o resumo da latência do syscall, suporte para o rastreamento de acessos para um determinado caminho, suporte para permitir a saída de depuração para stderr, bem como suporte para executar um processo de traçador como um neto destacado, não como pai.
Além disso, você poderá enviar informações de rastreamento para um arquivo específico em vez de stderr, para definir a sobrecarga para rastrear syscalls para um usecs de sobrecarga, para definir um arquivo PID para o processo de rastreamento, para limitar o comprimento das strings de impressão para strsize chars, para executar comandos como nome de usuário manipulando setgid e / ou setuid, e para se separar em um syscall específico.
Começando com strace
strace só é distribuído como um tarball de origem, mas pode ser facilmente instalado em várias distribuições de Linux a partir de seus principais repositórios de software. Para instalá-lo em fontes, basta baixar a versão mais recente do Softoware, salvar o arquivo em um local escolhido e descompactá-lo.
Abra um aplicativo de terminal, vá para a localização dos arquivos de arquivo extraídos (por exemplo, cd /home/softoware/strace-4.9), execute o ./configure && make & rsquo; comando para configurar e compilar strace, e então execute o & lsquo; make install & rsquo; comando como root ou o & lsquo; sudo make install & rsquo; comando como um usuário privilegiado para instalar o sistema strace em toda a largura.
O que há de novo nesta versão:
- Melhorias:
- Adicionado - sua opção para imprimir informações de protocolo e endereço associadas aos descritores de soquete.
- Extended & quot; -e read = set & quot; e "e-escreva = definir" opções para cobrir sendmsg, recvmsg, sendmmsg e recvmmsg syscalls.
- Implementou a descodificação completa de 32 bits dos comandos do ioctl (endereça o erro Debian # 692913 e o bug do Fedora # 902788).
- Implementou o suporte da API PTRACE_GETREGS em ia64.
- Implementou o suporte da API PTRACE_GETREGS em mips.
- Implementou o suporte da API PTRACE_GETREGSET em s390 / s390x.
- Implementou a decodificação de conjuntos de sistemas getrandom e seccomp.
- Implementou a descodificação completa de conjuntos de capacidade de 64 bits.
- Implementou a descodificação de todos os comandos prctl.
- Implementou a descodificação de comandos ioctl parametrizados.
- Implementou a decodificação dos comandos evdev ioctl.
- Implementou a decodificação de comandos v4l ioctl.
- Implementou a descodificação de comandos do SGDI v4 ioctl.
- Implementou a decodificação de comandos FIFOZE / FITHAW / FITRIM ioctl.
- Implementou a decodificação de bandeiras FALLOC_FL_ * fallocate.
- Implementou a decodificação da máscara de sinal rt_sigreturn em aarch64, x32 e x86_64.
- Decodificador de soquete aprimorado para suportar soquetes bluetooth.
- Decodificação aprimorada de comandos ioctl não listados.
- Decodificação aprimorada de getsockopt e setsockopt syscall.
- Decodificação melhorada do sysinfo syscall.
- Decodificação melhorada da struct cmsghdr.
- Decodificação melhorada do status de espera.
- Suporte aio aprimorado em arquiteturas não-x86 usando o libaio.h externo.
- Adicionado O_TMPFILE na lista de sinalizadores de modo aberto reconhecidos.
- Atualizou a lista de constantes do tipo de sistema de arquivos que é usada na descodificação de conjuntos de sistemas familiares de estatística.
- Listas atualizadas das constantes CAP_ *, PR_ *, PTRACE_ *, SCHED_ *, SO_ *, SOL_ *, SWAP_FLAG_ * e TFD_ *.
- listas atualizadas de constantes de sinal do Linux 3.19.
- Listas atualizadas de constantes de errno do Linux 3.19.
- Listas atualizadas de comandos ioctl do Linux 3.9.
- Adicionou novas entradas do syscall para corresponder ao Linux 3.19.
- Correções de erros:
- Corrigido vários erros no mapeamento entre números syscall e informações associadas, como o número de argumentos syscall, o nome do syscall e o decodificador syscall.
- corrigiu problemas de citações em descritores de impressão, nomes de arquivos, nomes de interface de rede, membros de struct utsname, nomes de dispositivo / volume dos comandos BLK * ioctl.
- Corrigido uid_t / git_t decodificação.
- Corrigido possíveis problemas de leitura fora dos limites nos decodificadores getdents / getdents64.
- Corrigido o truncamiento potencial de bandeiras abertas em algumas arquiteturas.
- Descodificação fixa da estrutura ifreq.ifr_name.
- Descodificação fixa do comando SIOCSIFNAME ioctl.
- Decodificação fixa de RENAME_ * flags renameat2.
- Corrigido a descodificação de estruturas de tempo UTIME_NOW / UTIME_OMIT.
- Corrigido a descodificação de subcalls indiretas de ipc em algumas arquiteturas.
- Corrigido a descodificação de fanotify_mark syscall em arquiteturas de 32 bits.
- Corrigido a descodificação de estruturas estatísticas de 32 bits em arquiteturas de 64 bits.
- Decodificação fixa de struct cmsghdr de 32 bits em arquiteturas de 64 bits.
- Corrigido a descodificação de 32 bits preadv / pwritev offset em arquiteturas de 64 bits.
- Descodificação fixa de sigreturn / rt_sigreturn mask mask em ia64, ppc, ppc64, sparc, sparc64, mips e s390.
- Saída do ponteiro da instrução corrigida (opção -i) em arquiteturas que suportam várias personalidades.
- Comportamento corrigido de & quot; -e read = set & quot; e "e-escreva = definir" quando os conjuntos de leitura e gravação se cruzam.
- Corrigido construir em sistemas onde struct sigaction não possui um membro sa_resorer.
- compilação corrigida com uclibc e musl libc.
- Portabilidade:
- Linux kernel & gt; = 2.5.46 é necessário. Versões mais antigas sem um suporte decente PTRACE_SETOPTIONS não funcionarão.
- Em mips, linux kernel & gt; = 2.6.15 é necessário. Versões mais antigas sem um suporte PTRACE_GETREGS decente não funcionarão.
- Em s390 e s390x, é necessário kernel linux & gt; = 2.6.27. Versões mais antigas sem um suporte PTRACE_GETREGSET decente não funcionarão.
O que é novo na versão 4.9:
- Alterações no comportamento:
- Suporte OABI desativado em sistemas ARM EABI por padrão, adicionou --enable-arm-oabi opção para habilitá-lo no horário de configuração.
- Melhorias:
- Adicionou a opção experimental -k para imprimir o rastreamento da pilha após cada syscall rastreado.
- Adicionado -w opção para produzir estatísticas na latência syscall. (endereço Debian bug # 457497).
- Adicionado suporte de arquitetura ARC.
- Adicionado o suporte da API PTRACE_GETREGS no PowerPC.
- Suporte libc e musl libc aprimorados Bionic.
- Rastreamento aprimorado de processos de personalidade x86 em x86_64 e x32.
- Rastreamento aprimorado de processos de personalidade ARM no AArch64.
- Detecção de personalidade aprimorada de 32/64 bits no PowerPC.
- Implementou a descodificação de teclas de add_key, ioprio_get, ioprio_set, kexec_load, keyctl, renameat2 e request_key.
- Decodificação robusta de conjuntos de sistemas selecionados, pselect e io_submit.
- Decodificação melhorada de delete_module, fanotify_init, fanotify_mark, fcntl, setdomainname, sethostname, setns e sync_file_range syscalls.
- Decodificação melhorada de máscaras de bits de sinal.
- Decodificação melhorada de descritores de arquivos.
- decodificação siginfo_t avançada.
- Descodificação PF_NETLINK aprimorada.
- Atualizado CLOCK_ * constantes (endereços Fedora bug # 1088455).
- Adicionou novas entradas do syscall para corresponder ao Linux 3.16.
- Correções de erros:
- Adicionado shmat e shmdt ao conjunto de mapeamento de memória syscalls relacionados.
- Reparado destacando dos processos interrompidos.
- Corrigiu a decodificação fanotify_mark em arquiteturas de 32 bits.
- Corrigido decodificação de deslocamento em sistemas pré-avançados e pwritev.
- Corrigiu a decodificação selecionada para o glibc no modo _FORTIFY_SOURCE.
- Corrigido a descodificação do epoll_ctl syscall com o argumento EPOLL_CTL_DEL.
- Corrigido compilação quando e conflito (endereços Fedora bug # 993384).
- Correções diversas na página do manual. (Endereços Debian bug # 725987).
O que é novo na versão 4.8:
- Alterações no comportamento:
- Em caso de terminação de tensão normal, quando a saída de rastreamento é redirecionada para um tubo, strace agora fecha-a e aguarda o término do processo do tubo antes de sair.
- Melhorias:
- Rastreamento implementado usando PTRACE_SEIZE API (quando disponível).
- Implementou uma detecção de personalidade de processo baseada em PTRACE_GETREGSET mais confiável em x86-64 e x32 (quando disponível).
- Adicionado -e trace = opção de memória para rastrear sistemas relacionados com mapeamento de memória.
- Documented -b option.
- As mensagens de status de saída permitidas devem ser suprimidas por meio da opção -q duas vezes.
- Adicionado suporte de arquitetura AArch64 (endereços Debian bug # 693074 e Fedora bug # 969858).
- Adicionado suporte para arquiteturas OpenRISC 1000, Meta e Xtensa.
- Adicionado o suporte de personalidade tilegx para Tile.
- Suporte aprimorado das arquiteturas da NOMMU.
- Decodificação avançada de getdents, mmap, perf_event_open, ptrace e quotactl syscalls.
- Adicionou novas entradas do syscall para corresponder ao Linux 3.9.
- Regenera a lista de nomes comuns do ioctl do Linux 3.9.
- Atualizou a lista de constantes de errno.
- Listas atualizadas das constantes AF_ *, MADV_ *, MAP_ *, MSG_ *, MS_ *, PF_ *, PR_ *, PTRACE_O_ * e TCP_ *.
- Implementou a decodificação de ioctls UBI.
- Removido redundante & quot; * 32 & quot; nomes ioctl.
- Correções de erros:
- Corrigido o ERESTARTNOINTR vazando para o espaço de usuários em kernels antigos (endereça o bug do Fedora # 659382).
- Correção da análise da cadeia de liberação do kernel (endereço Debian bug # 702309).
- Decodificação fixa de * xattr syscalls (endereça o erro Fedora # 885233).
- Manipulação corrigida de arquivos com números de inodo de 64 bits por strce de 32 bits (endereços do Fedora # 912790).
- Fixou garfos de rastreamento no SPARC.
- Descodificação fixa de fadvise64, fallocate, ftruncate64, io_submit, pread, preadv, pwrite, pwritev, readahead, sigaltstack, sync_file_range, sysctl e truncate64 syscalls.
- Categorias corrigidas de múltiplos conjuntos de sistemas na maioria das arquiteturas suportadas.
- Corrigido a descodificação de não-nativo de 32 bits de personalidade recv [m] msg syscalls.
- Corrigido a decodificação de múltiplos scripts de personalidade de 32 bits no x32.
- Corrigido a descodificação de longos argumentos syscall nas arquiteturas ARM, MIPS / o32, PowerPC, S390x e Tile.
- Corrigido decodificação semtimedop no S390x.
- Corrigiu a decodificação sram_alloc em Blackfin.
- Corrigido compilação quando process_vm_readv é uma facada.
- compilação corrigida com versões anteriores do libaio.h.
O que há de novo na versão 4.7:
- Esta é uma versão estável, com as correções de bugs usuais, suporte aprimorado para kernels Linux e outros melhorias.
O que é novo na versão 4.6:
- Esta é uma versão estável, com correções de bugs comuns, suporte aprimorado para novos kernels do Linux e outras melhorias, incluindo um novo método de seguir clone, fork e vfork syscalls usando as facilidades explícitas do kernel do Linux para rastrear a criação de threads e processos filho.
O que é novo na versão 4.5.20:
- Melhorias:
- Implementou a decodificação de novos sistemas linux: inotify_init1, recvmmsg.
- Implementou a decodificação básica de novos sistemas de sistema linux: preadv, pwritev, rt_tgsigqueueinfo, perf_event_open.
- Decodificação aprimorada de syscalls recentemente adicionados em arquiteturas não-x86 substituindo um decodificador desnudo por analisadores elaborados habilitados anteriormente para x86 / x86-64.
- Implementada opção -C para combinar saída regular e -c. (Endereços Debian bug # 466196)
- Decodificação melhorada de mbind e mremap syscalls.
- descodificação das opções de soquete SOL_PACKET aprimoradas.
- Lista regenerada de nomes ioctl do linux 2.6.33.
- Adicionado suporte de arquitetura TILE.
- Correções de erros:
- Construtura corrigida com cabeçalhos de kernel do Linux 2.6.32-rc5 +. (Endereços Debian bug # 560516 e Fedora bug # 539044)
- Consolidação corrigida em mips.
- Manipulação corrigida de sistemas Linux sem struct statfs64.
- Correção de máscara de sinal de relatório por sigreturn no powerpc.
- Corrigido o estouro potencial do buffer da pilha no decodificador selecionado. (Endereços Fedora bug # 556678)
- Correção de decodificação indireta de msgsd e ipccall.
- Decodificação corrigida de syscalls de 64 bits. (Endereços Debian bug # 570603)
- A decodificação de getsockopt corrigida em arquiteturas onde sizeof (long) & gt; sizeof (int). (Endereços Debian bug # 494844)
- Decodificação corrigida de epoll_pwait. (Endereços Debian bug # 513014)
- Manipulação corrigida de threads mortos.
Comentários não encontrado