Share via


DTrace

A partir do Windows Server 2025, o dtrace está incluído como uma ferramenta interna. O DTrace é um utilitário de linha de comando que permite aos usuários monitorar e depurar o desempenho do sistema em tempo real. Com o dtrace, os usuários podem instrumentar de forma dinâmica o kernel e o código do espaço do usuário sem alterar o código em si.

Essa ferramenta avançada dá suporte a várias técnicas de coleta e análise de dados, incluindo agregações, histogramas e rastreamento de eventos em nível de usuário. É possível especificar as investigações em scripts do dtrace em que o script define as investigações a serem monitoradas e as ações a serem adotadas quando as investigações são acionadas. Uma investigação é um ponto específico no código em que os dados podem ser coletados para executar essas ações.

Observação

Esta porta interna do dtrace difere do instalador MSI do DTrace para parâmetros circundantes e outros recursos do Windows. Para saber mais sobre o DTrace para Windows, confira DTrace no Windows.

Para obter um guia abrangente sobre como usar o DTrace, confira o Guia de Rastreamento Dinâmico.

Habilitar o DTrace

Para você usar o dtrace, é preciso primeiro habilitá-lo. Para habilitar o dtrace, abra um prompt de comando elevado ou o PowerShell como administrador e execute:

bcdedit /set dtrace on

Uma reinicialização é necessária para que essa alteração entre em vigor.

Sintaxe

dtrace [-BCeFhlqSvVwYZ] [-b bufsz] [-c cmd] [-D name[=def]] [-I path]
[-L path] [-o output] [-p pid] [-s script] [-U name] [-x opt[=val]] [-X a|c|s|t]
[-y symbol path]

[-P provider [[ predicate ] action ]] [-m [ provider: ]
module [[ predicate ] action ]] [-f [[ provider: ] module: ]
func [[ predicate ] action ]] [-n [[[ provider: ] module: ] func: ]
name [[ predicate ] action ]] [-i probe-id [[ predicate ] action ]] [ args ... ]

Observação

Os parâmetros de dtrace.exe diferenciam maiúsculas de minúsculas. Utilize maiúsculas e minúsculas corretamente ao especificar parâmetros para evitar comportamentos inesperados.

Parâmetro Descrição
-b <bufsz> Define o tamanho do buffer usado para armazenar dados de rastreamento, onde bufsz é o tamanho desejado do buffer em bytes, quilobytes (k), megabytes (m) ou gigabytes (g).
-c <cmd> Executa o comando especificado e sai quando ele é concluído, onde cmd é o comando que você deseja executar antes de iniciar o rastreamento. Se for usada mais de uma instância de c, o dtrace será encerrado quando terminar a execução de todos os comandos e informará o status de saída de cada processo filho.
C- Executa o pré-processador ucpp em arquivos de script antes de executar o rastreamento.
-D <name>=<def> Define um símbolo ao invocar o pré-processador, onde name é o nome do símbolo a ser definido e def é um valor opcional a ser atribuído ao símbolo.
-E Sai após compilar uma solicitação, mas antes de habilitar investigações.
-f Habilita ou lista investigações que correspondem ao nome da função especificada.
-F Combina a saída de rastreamento por função, facilitando a análise.
-h Gera um arquivo de cabeçalho com definições para investigações estáticas.
-i <probe-id> Habilita ou lista investigações que correspondem à ID de investigação especificada, onde probe-id é o identificador da investigação a ser rastreado.
-I <path> Adiciona o diretório especificado ao caminho de pesquisa do pré-processador, onde path é o diretório que você deseja adicionar contendo os arquivos #include.
-l Lista as investigações que correspondem aos critérios especificados com base nos parâmetros de -P, -m, -f, -n, -i e -s. Se esses parâmetros não forem especificados, todos as investigações serão listadas.
-L <path> Adiciona o diretório especificado ao caminho de pesquisa da biblioteca, onde path é o diretório da biblioteca que você deseja adicionar contendo definições comuns.
-m Habilita ou lista investigações que correspondem ao nome do módulo especificado em um argumento usando o formato provider:module ou module. Se os qualificadores não forem especificados além do nome do módulo, todos as investigações com esse nome de módulo serão correspondidas.
-n Habilita ou lista investigações que correspondem ao nome de investigação especificado em um argumento usando o formato provider:module:function:name, module:function:name, function:name ou name. Se os qualificadores não forem especificados além do nome da investigação, todos as investigações com esse nome serão correspondidas.
-o <output> Define o arquivo de saída para os dados de rastreamento, onde output é o nome do arquivo que você deseja usar para os dados de rastreamento.
-p <pid> Obtém o PID (ID de processo especificado) e armazena em cache as tabelas de símbolos, que podem ser usadas para analisar o comportamento do programa.
-P <provider> Habilita ou lista investigações que correspondem ao nome do provedor especificado, onde provider é o nome do provedor. É possível usar mais de uma instância do parâmetro -P ao mesmo tempo.
-Q Define o modo silencioso, que só gera dados rastreados de forma explícita.
-s <script> Habilita ou lista investigações de acordo com o script D especificado, onde script é o nome do script que você deseja executar. Se -e for especificado, o programa será compilado, mas sem execução de coleta de dados. Se -l for especificado, o programa será compilado e a lista de investigações correspondentes será exibida, mas sem execução de coleta de dados. Se -e ou -l não for especificado, o programa será compilado, a coleta de dados será realizada de acordo com as investigações especificadas e o rastreamento começará.
-S Imprime o código intermediário do compilador de linguagem D para depuração em stderr.
-U <name> Cancela a definição de um símbolo ao invocar o pré-processador, onde name é o nome do símbolo que você deseja excluir.
-v Define o modo detalhado, que relata atributos e argumentos de estabilidade.
-v Exibe a versão da API do dtrace.
w- Permite ações destrutivas quando especificado com os parâmetros -s, -P, -m, -f, -n ou -i. Ações destrutivas podem incluir ações como modificar variáveis do kernel, alterar o comportamento de chamadas do sistema ou travar o sistema.
-x <opt>=<val> Habilita ou modifica o compilador e as opções de rastreamento, onde opt é o nome da opção que você deseja habilitar ou modificar e val é um valor opcional.
-X <a|c|s|t> Controla até que ponto o código C compilado adere ao padrão ISO C ao invocar o cpp. Os argumentos disponíveis são:
  • -Xa (padrão): fornece extensões de compatibilidade ISO C mais K&R com mudanças semânticas exigidas pela ISO C. A macro predefinida __STDC__ tem um valor de 0 quando cpp é invocado.
  • -Xc (conformidade): fornece uma conformidade estrita da ISO C sem extensões de compatibilidade K&R de C. O macro predefinido __STDC__ tem um valor de 1 quando cpp é invocado.
  • -Xs (K&R C): fornece apenas K&R C e a macro __STDC__ não é definida quando o cpp é invocado.
  • -Xt (transição): fornece extensões de compatibilidade ISO C mais K&R C sem mudanças semânticas exigidas pela ISO C. A macro predefinida __STDC__ tem um valor de 0 quando cpp é invocado.
-y <symbol path> Define o caminho de pesquisa de símbolos para o script dtrace resolver, onde symbol path é o caminho para a biblioteca ou diretório compartilhado contendo os símbolos. Para saber mais, confira Caminhos de Símbolo.
-y Usa o caminho de pesquisa de símbolo default para o script do dtrace.
Z- Permite descrições de investigações que correspondem a zero investigações para depuração.

A seguinte lista contém as descrições restantes:

  • Predicate: o predicado aparece entre barras (/ /) e é uma expressão de D-, que é uma expressão booliana e pode fazer referência a variáveis, constantes e funções. É possível usar predicados para filtrar a saída de dtrace com base nesses eventos. Essa expressão é avaliada toda vez que uma investigação é acionada. Se o predicado for avaliado como true, a ação associada será executada.

  • Action: a ação aparece entre chaves ({ }) e é um conjunto de instruções de linguagem D- que são executadas quando uma investigação é acionada e o predicado associado, caso exista, é avaliado como true. As ações podem ser usadas para imprimir instruções de saída, registrar dados ou executar outras operações, como enviar um sinal ou modificar uma variável.

  • Module: um componente de um provedor contendo um conjunto de investigações relacionadas. Os módulos podem ser especificados em scripts dtrace para limitar o escopo do script a um módulo específico ou conjunto de módulos.

  • Func: um nome de função associado a uma investigação. Por exemplo, a investigação syscall::NtReadFile está associada à função read. As funções podem ser especificadas em scripts dtrace para limitar o escopo do script a uma função ou conjunto de funções específicos.

  • Args: os argumentos que são passados para a expressão de ação quando uma investigação é acionada e seu predicado associado, caso exista, é avaliado como true. Args pode ser usado para capturar dados do contexto de investigação, como os valores de argumentos de função ou valores de retorno de chamada do sistema. Args também pode ser usado para passar dados entre investigações ou para modificar o comportamento do script.

Exemplos

Para rastrear todas as chamadas do sistema, imprimi o nome do executável e o nome da chamada do sistema realizada, execute:

dtrace -n 'syscall:::entry { printf("%s called syscall %s", execname, probefunc); }'

Esse comando rastreia a função "function_name" no processo com o PID especificado e imprime o nome da função, o PID do processo que a chama e o nome do executável.

dtrace -n 'pid$target::function_name:entry { printf("Function %s called by process %d (%s)", probefunc, pid, execname); }' -p <PID>

Para obter mais exemplos sobre como usar o dtrace, confira Introdução ao DTrace - Comandos de uma linha.

Confira também