Este é o strace de comando que pode ser executado no provedor de hospedagem gratuita OnWorks usando uma de nossas várias estações de trabalho online gratuitas, como Ubuntu Online, Fedora Online, emulador online do Windows ou emulador online do MAC OS
PROGRAMA:
NOME
strace - rastrear chamadas e sinais do sistema
SINOPSE
traço [-CdffhikqrtttTvVxxy] [-In] [-bexecvo] [-eexpr] ... [-acoluna] [-olima] [-sstrsize]
[-Pcaminho] ... -ppid... / [-D] [-Evar[=onda]] ... [-unome de usuário] comando [args]
traço -c[df] [-In] [-bexecvo] [-eexpr] ... [-Oem cima] [-Sordenar por] -ppid... / [-D]
[-Evar[=onda]] ... [-unome de usuário] comando [args]
DESCRIÇÃO
No caso mais simples traço executa o especificado comando até que saia. Ele intercepta e
registra as chamadas do sistema que são chamadas por um processo e os sinais que são recebidos
por um processo. O nome de cada chamada de sistema, seus argumentos e seu valor de retorno são
impresso no erro padrão ou no arquivo especificado com o -o opção.
traço é uma ferramenta útil de diagnóstico, instrução e depuração. Administradores de sistema,
diagnosticadores e solucionadores de problemas vão achar que é inestimável para resolver problemas com
programas para os quais a fonte não está prontamente disponível, uma vez que não precisam ser
recompilado para rastreá-los. Estudantes, hackers e curiosos descobrirão
que muito pode ser aprendido sobre um sistema e suas chamadas de sistema rastreando até
programas comuns. E os programadores descobrirão que, uma vez que as chamadas e sinais do sistema são
eventos que acontecem na interface do usuário / kernel, um exame mais detalhado desse limite é
muito útil para isolamento de bug, verificação de sanidade e tentativa de capturar condições de corrida.
Cada linha do rastreamento contém o nome da chamada do sistema, seguido por seus argumentos em
parênteses e seu valor de retorno. Um exemplo de stracing o comando "cat / dev / null"
é:
aberto ("/ dev / null", O_RDONLY) = 3
Erros (normalmente um valor de retorno de -1) têm o símbolo errno e a string de erro anexados.
open ("/ foo / bar", O_RDONLY) = -1 ENOENT (Não existe esse arquivo ou diretório)
Os sinais são impressos como símbolo de sinal e estrutura siginfo decodificada. Um trecho de
traçar e interromper o comando "sleep 666" é:
sigsuspend ([]
--- SIGINT {si_signo = SIGINT, si_code = SI_USER, si_pid = ...} ---
+++ morto por SIGINT +++
Se uma chamada de sistema está sendo executada e, entretanto, outra está sendo chamada de um
thread / processo diferente então traço tentará preservar a ordem desses eventos e
marcar a chamada em andamento como sendo inacabado. Quando a chamada retornar, ela será marcada como
retomou.
[pid 28772] selecione (4, [3], NULL, NULL, NULL
[pid 28779] clock_gettime (CLOCK_REALTIME, {1130322148, 939977000}) = 0
[pid 28772] <... selecionar resumido>) = 1 (em [3])
A interrupção de uma chamada de sistema (reiniciável) por uma entrega de sinal é processada de forma diferente
quando o kernel encerra a chamada do sistema e também organiza sua reexecução imediata após o
o manipulador de sinais é concluído.
ler (0, 0x7ffff72cf5cf, 1) =? ERESTARTSYS (para ser reiniciado)
--- SIGALRM... ---
rt_sigreturn(0xe) = 0
ler (0, "", 1) = 0
Os argumentos são impressos de forma simbólica com paixão. Este exemplo mostra o shell
realizando redirecionamento de saída ">> xyzzy":
open ("xyzzy", O_WRONLY | O_APPEND | O_CREAT, 0666) = 3
Aqui, o terceiro argumento de open é decodificado dividindo o argumento flag em seu
três componentes OR bit a bit e imprimir o valor do modo em octal pela tradição. Onde
o uso tradicional ou nativo difere de ANSI ou POSIX, os últimos formatos são preferidos.
Em alguns casos, traço a saída provou ser mais legível do que a fonte.
Ponteiros de estrutura são referenciados e os membros são exibidos conforme apropriado. Em tudo
casos os argumentos são formatados da maneira mais semelhante a C possível. Por exemplo, o
essência do comando "ls -l / dev / null" é capturada como:
lstat ("/ dev / null", {st_mode = S_IFCHR | 0666, st_rdev = makedev (1, 3), ...}) = 0
Observe como o argumento 'struct stat' é referenciado e como cada membro é exibido
simbolicamente. Em particular, observe como o membro st_mode é cuidadosamente decodificado em um
bit a bit-OR de valores simbólicos e numéricos. Observe também neste exemplo que o primeiro
argumento para lstat é uma entrada para a chamada do sistema e o segundo argumento é uma saída.
Uma vez que os argumentos de saída não são modificados se a chamada do sistema falhar, os argumentos nem sempre
ser desreferenciado. Por exemplo, tentar novamente o exemplo "ls -l" com um arquivo inexistente
produz a seguinte linha:
lstat ("/ foo / bar", 0xb004) = -1 ENOENT (Não existe esse arquivo ou diretório)
Neste caso, a luz da varanda está acesa, mas não há ninguém em casa.
Os ponteiros de caracteres são referenciados e impressos como strings C. Caracteres não imprimíveis em
strings são normalmente representadas por códigos de escape C comuns. Só o primeiro strsize (32
por padrão) bytes de strings são impressos; strings mais longas têm reticências anexadas
seguindo a cotação de fechamento. Aqui está uma linha de "ls -l" onde o getpwuid biblioteca
rotina está lendo o arquivo de senha:
ler (3, "root :: 0: 0: Administrador do sistema: /" ..., 1024) = 422
Enquanto as estruturas são anotadas com chaves, ponteiros simples e matrizes são impressos
usando colchetes com vírgulas separando os elementos. Aqui está um exemplo do
comando "id" em um sistema com ids de grupo suplementares:
getgroups (32, [100, 0]) = 2
Por outro lado, os conjuntos de bits também são mostrados usando colchetes, mas os elementos do conjunto são
separados apenas por um espaço. Aqui está o shell se preparando para executar um comando externo:
sigprocmask (SIG_BLOCK, [CHLD TTOU], []) = 0
Aqui, o segundo argumento é um conjunto de bits de dois sinais, SIGCHLD e SIGTTOU. Em alguns casos
o conjunto de bits está tão cheio que imprimir os elementos não configurados é mais valioso. Naquilo
caso, o conjunto de bits é prefixado por um til como este:
sigprocmask (SIG_UNBLOCK, ~ [], NULL) = 0
Aqui, o segundo argumento representa o conjunto completo de todos os sinais.
OPÇÕES
-c Conte o tempo, chamadas e erros para cada chamada do sistema e relate um resumo sobre
saída do programa. No Linux, isso tenta mostrar o tempo do sistema (tempo de CPU gasto
rodando no kernel) independente do relógio de parede. Se -c é usado com -f
or -F (abaixo), apenas os totais agregados para todos os processos rastreados são mantidos.
-C Como -c mas também imprime saída regular enquanto os processos estão em execução.
-D Execute o processo do rastreador como um neto destacado, não como pai do rastreador.
Isso reduz o efeito visível de traço mantendo o traçado um filho direto
do processo de chamada.
-d Mostrar alguma saída de depuração de traço -se no erro padrão.
-f Rastreie processos filho à medida que são criados por processos rastreados atualmente como um
resultado do garfo(2) garfo(2) e clonar(2) chamadas de sistema. Observe que -p PID
-f irá anexar todos os threads do processo PID se for multi-threaded, não só
thread com thread_id = PID.
-ff Se o -o nome do arquivo opção está em vigor, cada rastreamento de processos é gravado
nome do arquivo.pid onde pid é o id de processo numérico de cada processo. Isto é
incompatível com -c, uma vez que nenhuma contagem por processo é mantida.
-F Esta opção agora está obsoleta e tem a mesma funcionalidade que -f.
-h Imprima o resumo da ajuda.
-i Imprime o ponteiro da instrução no momento da chamada do sistema.
-k Imprime o rastreamento da pilha de execução dos processos rastreados após cada chamada do sistema
(experimental). Esta opção está disponível apenas se traço é construído com
libunwind.
-q Suprimir mensagens sobre anexar, desanexar etc. Isso acontece automaticamente
quando a saída é redirecionada para um arquivo e o comando é executado diretamente em vez de
anexando.
-qq Se fornecido duas vezes, suprime as mensagens sobre o status de saída do processo.
-r Imprime um carimbo de data / hora relativo na entrada para cada chamada do sistema. Isso registra o
diferença de tempo entre o início de chamadas de sistema sucessivas.
-t Prefixe cada linha do traço com a hora do dia.
-tt Se fornecido duas vezes, a hora impressa incluirá os microssegundos.
-ttt Se dado três vezes, o tempo impresso incluirá os microssegundos e o
a parte inicial será impressa como o número de segundos desde a época.
-T Mostra o tempo gasto em chamadas do sistema. Isso registra a diferença de tempo entre
o início e o fim de cada chamada de sistema.
-w Resuma a diferença de tempo entre o início e o fim de cada sistema
ligar. O padrão é resumir a hora do sistema.
-v Imprima versões não abreviadas de chamadas de ambiente, estatísticas, termios, etc.
Essas estruturas são muito comuns em chamadas e, portanto, o comportamento padrão é exibido
um subconjunto razoável de membros da estrutura. Use esta opção para obter todos os
detalhes sangrentos.
-V Imprima o número da versão de traço.
-x Imprime todas as strings não ASCII em formato de string hexadecimal.
-xx Imprime todas as strings em formato hexadecimal.
-y Imprime caminhos associados aos argumentos do descritor de arquivo.
-aa Imprimir ip: pares de portas associados aos descritores de arquivo de soquete.
-a coluna Alinhe os valores de retorno em uma coluna específica (coluna padrão 40).
-b syscall Se o syscall especificado for alcançado, desanexar do processo rastreado. Atualmente, apenas
execvo syscall é compatível. Esta opção é útil se você deseja rastrear
processo multi-threaded e, portanto, requer -f, mas não deseja rastrear seu
crianças (potencialmente muito complexas).
-e expr Uma expressão de qualificação que modifica quais eventos rastrear ou como rastrear
eles. O formato da expressão é:
[qualificador=][!]value1[,value2] ...
onde qualificador é um dos traçar, abrev, detalhado, cru, sinal, ler, ou escrever
e valor é um símbolo ou número dependente do qualificador. O qualificador padrão é
traçar. Usar um ponto de exclamação anula o conjunto de valores. Por exemplo,
-e aberto significa literalmente -e traçar=aberto que por sua vez significa rastrear apenas o aberto
chamada de sistema. Por contraste, -e traçar=!aberto significa rastrear todas as chamadas do sistema
exceto aberto. Além disso, os valores especiais todos os e Nenhum tem o óbvio
significados.
Observe que alguns shells usam o ponto de exclamação para a expansão do histórico, mesmo
dentro dos argumentos citados. Nesse caso, você deve escapar do ponto de exclamação com um
barra invertida.
-e traçar=conjunto
Rastreia apenas o conjunto especificado de chamadas do sistema. o -c opção é útil para
determinar quais chamadas do sistema podem ser úteis para rastrear. Por exemplo,
traçar=abrir, fechar, ler, escrever significa rastrear apenas essas quatro chamadas de sistema. Ser
cuidado ao fazer inferências sobre o limite do usuário / kernel se apenas um subconjunto
de chamadas do sistema estão sendo monitoradas. O padrão é traçar=todos os.
-e traçar=lima
Rastreie todas as chamadas de sistema que usam um nome de arquivo como argumento. Você pode pensar
disso como uma abreviatura para -e traçar=aberto,estado,chmod,desvincular,... qual é
útil para ver quais arquivos o processo está referenciando. Além disso, usando
a abreviatura irá garantir que você não esqueça acidentalmente de incluir um
ligar como lstat na lista. Betchya teria esquecido esse.
-e traçar=processo
Rastreie todas as chamadas de sistema que envolvem gerenciamento de processo. Isso é útil para
observando as etapas de bifurcação, espera e execução de um processo.
-e traçar=rede
Rastreie todas as chamadas de sistema relacionadas à rede.
-e traçar=sinal
Rastreie todas as chamadas de sistema relacionadas a sinais.
-e traçar=ipc
Rastreie todas as chamadas de sistema relacionadas ao IPC.
-e traçar=desc
Rastreie todas as chamadas de sistema relacionadas ao descritor de arquivo.
-e traçar=memória
Rastreie todas as chamadas de sistema relacionadas ao mapeamento de memória.
-e abrev=conjunto
Abrevie a saída da impressão de cada membro de grandes estruturas. o
padrão é abrev=todos os. O -v opção tem o efeito de abrev=Nenhum.
-e detalhado=conjunto
Estruturas de desreferência para o conjunto especificado de chamadas do sistema. O padrão é
detalhado=todos os.
-e cru=conjunto Imprime argumentos brutos não decodificados para o conjunto especificado de chamadas do sistema. Esse
opção tem o efeito de fazer com que todos os argumentos sejam impressos em hexadecimal.
Isso é útil principalmente se você não confiar na decodificação ou se precisar conhecer o
valor numérico real de um argumento.
-e sinal=conjunto
Rastreia apenas o subconjunto especificado de sinais. O padrão é sinal=todos os. Para
exemplo, sinal =! SIGIO (ou sinal=!io) faz com que os sinais SIGIO não sejam
rastreado.
-e ler=conjunto Execute um despejo hexadecimal e ASCII completo de todos os dados lidos do arquivo
descritores listados no conjunto especificado. Por exemplo, para ver todas as entradas
atividade em descritores de arquivo 3 e 5 usar -e ler=3,5. Observe que este é
independente do traçado normal do ler(2) chamada de sistema que é
controlado pela opção -e traçar=ler.
-e escrever=conjunto
Execute um despejo hexadecimal e ASCII completo de todos os dados gravados no arquivo
descritores listados no conjunto especificado. Por exemplo, para ver todos os resultados
atividade em descritores de arquivo 3 e 5 usar -e escrever=3,5. Observe que este é
independente do traçado normal do escrever(2) chamada de sistema que é
controlado pela opção -e traçar=escrever.
-I interruptível
Quando o strace pode ser interrompido por sinais (como pressionar ^ C). 1: não
os sinais são bloqueados; 2: sinais fatais são bloqueados durante a decodificação syscall
(predefinição); 3: sinais fatais são sempre bloqueados (padrão se '-o FILE PROG'); 4:
sinais fatais e SIGTSTP (^ Z) estão sempre bloqueados (útil para fazer strace -o
O FILE PROG não para em ^ Z).
-o nome do arquivo Grave a saída do rastreamento no arquivo nome do arquivo em vez de stderr. Usar
nome do arquivo.pid if -ff é usado. Se o argumento começar com '|' ou com '!' então
o resto do argumento é tratado como um comando e toda a saída é canalizada para
isto. Isso é conveniente para canalizar a saída de depuração para um programa sem
afetando os redirecionamentos dos programas executados.
-O em cima Defina a sobrecarga para rastrear chamadas do sistema para em cima microssegundos. Isto é
útil para substituir a heurística padrão para adivinhar quanto tempo é
gasto em mera medição quando cronometrando chamadas de sistema usando o -c opção. O
a precisão da heurística pode ser avaliada cronometrando a execução de um determinado programa sem
rastreamento (usando tempo(1)) e comparando o tempo de chamada do sistema acumulado ao
total produzido usando -c.
-p pid Anexe ao processo com o ID do processo pid e comece a traçar. O traço
pode ser encerrado a qualquer momento por um sinal de interrupção do teclado (CTRL-C). traço
irá responder destacando-se do (s) processo (s) traçado (s), deixando-o (os)
para continuar correndo. Múltiplo -p opções podem ser usadas para anexar a muitos
processos. -p "` pidof PROG` "sintaxe é suportada.
-P caminho Rastreie apenas chamadas de sistema acessando caminho. Múltiplo -P opções podem ser usadas para
especificar vários caminhos.
-s strsize Especifique o tamanho máximo da string a ser impressa (o padrão é 32). Observe que
nomes de arquivos não são considerados strings e são sempre impressos por extenso.
-S ordenar por Classifique a saída do histograma impresso pelo -c opção pelo especificado
critério. Os valores legais são tempo, chamadas, nome e nada (o padrão é tempo).
-u nome de usuário Execute o comando com o ID do usuário, ID do grupo e grupos suplementares de nome de usuário.
Esta opção só é útil quando executado como root e ativa o correto
execução de binários setuid e / ou setgid. A menos que esta opção seja usada setuid
e os programas setgid são executados sem privilégios efetivos.
-E var=onda Executar o comando com var=onda em sua lista de variáveis de ambiente.
-E var Eliminar var da lista herdada de variáveis de ambiente antes de transmiti-la
para o comando.
DIAGNÓSTICO
Quando comando saídas, traço sai com o mesmo status de saída. Se comando é encerrado por um
sinal, traço termina com o mesmo sinal, de modo que traço pode ser usado como
processo de invólucro transparente para o processo pai de chamada. Observe que pai-filho
relacionamento (notificações de parada de sinal, valor getppid (), etc) entre o processo rastreado e
seus pais não são preservados a menos que -D é usado.
Ao usar -p, o status de saída de traço é zero, a menos que tenha ocorrido um erro inesperado em
fazendo o rastreamento.
SETUID INSTALAÇÃO
If traço é instalado setuid para root, então o usuário de chamada será capaz de se conectar e
rastrear processos pertencentes a qualquer usuário. Além disso, os programas setuid e setgid serão
executado e rastreado com os privilégios efetivos corretos. Uma vez que somente usuários confiáveis com
privilégios completos de root devem ter permissão para fazer essas coisas, só faz sentido instalar
traço como setuid para root quando os usuários que podem executá-lo são restritos a esses usuários
quem tem essa confiança. Por exemplo, faz sentido instalar uma versão especial do traço
com modo 'rwsr-xr--', usuário raiz e grupo traçar, onde membros do traçar grupo são
usuários confiáveis. Se você usar este recurso, lembre-se de instalar um não setuid
versão do traço para usuários comuns usarem.
Use strace online usando serviços onworks.net
