Partilhar via


Programação do DTrace

O DTrace dá suporte à linguagem de programação D. Este tópico descreve como começar a escrever e usar scripts DTrace.

Para obter informações gerais sobre o DTrace no Windows, consulte DTrace.

Para obter informações detalhadas sobre o DTrace, consulte a Especificação do OpenDTrace versão 1.0 na Universidade de Cambridge.

Observação

O DTrace tem suporte nas compilações do Insider do Windows após a versão 18980 e o build 18975 do Windows Server.

Scripts de exemplo adicionais

Scripts D adicionais aplicáveis a cenários do Windows estão disponíveis no diretório de exemplos do código-fonte DTrace.

https://github.com/microsoft/DTrace-on-Windows/tree/windows/samples/windows

Um conjunto de scripts do kit de ferramentas opentrace está disponível em https://github.com/opendtrace/toolkit.

Olá, Mundo

Os scripts DTrace são arquivos de texto simples que contêm comandos e elementos de script de programação D.

dtrace:::BEGIN
{
  trace("Hello World from DTrace!");
  exit(0);
}

Salve o arquivo como helloworld.d.

Abra uma janela do prompt de comando como administrador e execute o script usando a opção -s.

dtrace -s helloworld.d
dtrace: script '.\helloworld.d' matched 1 probe
CPU     ID                    FUNCTION:NAME
  0      1                           :BEGIN   Hello World from DTrace!

Hora de retorno de NtCreateUserProcess

Você pode criar scripts DTrace para acompanhar o tempo gasto em várias funções/eventos. Veja abaixo um exemplo simples que acompanha a função NtCreateUserProcess entre entrada/retorno para o processo de criação.


syscall::NtCreateUserProcess:entry
{
    self->ts = timestamp;
}

syscall::NtCreateUserProcess:return
{
    printf(" [Caller %s]: Time taken to return from create process is %d MicroSecond \n", execname, (timestamp - self->ts)/ 1000);
}

Salve o arquivo como ntcreatetime.d e use a opção -s para executar o script de teste.

C:\Windows\system32>dtrace -s ntcreatetime.d
dtrace: script 'ntcreatetime.d' matched 2 probes
CPU     ID                    FUNCTION:NAME
  0    183       NtCreateUserProcess:return  [Caller svchost.exe]: Time taken to return from create process is 51191 MicroSecond

  0    183       NtCreateUserProcess:return  [Caller SearchIndexer.]: Time taken to return from create process is 84418 MicroSecond

  0    183       NtCreateUserProcess:return  [Caller SearchIndexer.]: Time taken to return from create process is 137961 MicroSecond

Rastreador de Exclusão de Arquivo

Este script de exemplo usa o provedor de syscall para instrumentar NtOpenFile na entrada e verifica se há sinalizador passado (argumento nº 5) para controlar exclusões em todo o sistema.

Copie o script abaixo para filedeletetracker.d.

ERROR{exit(0);}

struct ustr{uint16_t buffer[256];};

syscall::NtOpenFile:entry
{
   this->deleted = arg5 & 0x00001000; /* & with FILE_DELETE_ON_CLOSE */

  if (this->deleted) {
        this->attr = (nt`_OBJECT_ATTRIBUTES*)
            copyin(arg2, sizeof(nt`_OBJECT_ATTRIBUTES));

        if (this->attr->ObjectName) {
            this->objectName = (nt`_UNICODE_STRING*)
                copyin((uintptr_t)this->attr->ObjectName,
                       sizeof(nt`_UNICODE_STRING));
          
            this->fname = (uint16_t*)
                copyin((uintptr_t)this->objectName->Buffer,
                       this->objectName->Length);

            printf("Process %s PID %d deleted file %*ws \n", execname,pid, 
			this->objectName->Length / 2, 
			 ((struct ustr*)this->fname)->buffer);
        }
    }
}

Use a opção -s para executar o script de teste.

Crie ou localize um arquivo que você gostaria de excluir. Mova o arquivo para a Lixeira e, em seguida, esvazie a Lixeira. Quando o arquivo for excluído, o evento será acionado e as informações sobre a exclusão de arquivo serão exibidas.

C:\Windows\system32>dtrace -s filedeletetracker.d
dtrace: script 'filedeletetracker.d' matched 8 probes
CPU     ID                    FUNCTION:NAME
  0    512                 NtOpenFile:entry Process explorer.exe PID 4684 deleted file \??\C:\$Recycle.Bin\S-1-12-1-3310478672-1302480547-4207937687-2985363607\$ROSR3FA.txt

Este programa foi projetado para continuar a monitorar exclusões de arquivo. Pressione CTRL+C para sair.

Para obter exemplos de código maiores adicionais, consulte o próximo tópico, Exemplos de código do Windows DTrace.

Consulte Também

DTrace no Windows

DTrace ETW

Exemplos de código do Windows DTrace

Despejo dinâmico do DTrace