Compartir a través de


Programación de DTrace

DTrace admite el lenguaje de programación D. En este tema se describe cómo empezar a escribir y usar scripts DTrace.

Para obtener información general sobre DTrace en Windows, vea DTrace.

Para obtener información detallada sobre DTrace, consulte la especificación OpenDTrace versión 1.0 en la Universidad de Cambridge.

Nota

DTrace se admite en las compilaciones de Insider de Windows después de la versión 18980 y la compilación 18975 de Windows Server.

Scripts de ejemplo adicionales

Los scripts D adicionales aplicables a escenarios de Windows están disponibles en el directorio de ejemplos del código fuente de DTrace.

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

Hay disponible un conjunto de scripts de kit de herramientas de opentrace en https://github.com/opendtrace/toolkit.

Hola mundo

Los scripts DTrace son archivos de texto simples que contienen comandos y elementos de script de programación D.

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

Guarde el archivo como helloworld.d.

Abra una ventana del símbolo del sistema como administrador y ejecute el script con la opción -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

Puede crear scripts de DTrace para realizar un seguimiento del tiempo necesario en varias funciones o eventos. A continuación se muestra un ejemplo sencillo que realiza un seguimiento de la función NtCreateUserProcess entre la entrada y la devolución del proceso de creación.


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);
}

Guarde el archivo como ntcreatetime.d y use la opción -s para ejecutar el script de prueba.

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

Seguimiento de eliminación de archivos

Este script de ejemplo usa el proveedor syscall para instrumentar NtOpenFile en la entrada y comprueba si se pasa la marca (argumento 5) para realizar un seguimiento de las eliminaciones en todo el sistema.

Copie el siguiente script en 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 la opción -s para ejecutar el script de prueba.

Cree o busque un archivo que le gustaría eliminar. Mueva el archivo a la Papelera de reciclaje y, a continuación, desactive la Papelera de reciclaje. Cuando se elimine el archivo y se active el evento y se mostrará la información sobre la eliminación del archivo.

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 está diseñado para seguir supervisando las eliminaciones de archivos. Presione CTRL+C para salir.

Para obtener ejemplos de código más grandes, consulta el siguiente tema, Ejemplos de código de Windows de DTrace.

Consulte también

DTrace en Windows

DTrace ETW

Ejemplos de código de Windows de DTrace

Volcado en vivo de DTrace