Condividi tramite


Programmazione di DTrace

DTrace supporta il linguaggio di programmazione D. Questo argomento descrive come iniziare a scrivere e usare script DTrace.

Per informazioni generali su DTrace in Windows, vedere DTrace.

Per informazioni dettagliate su DTrace, consultare la Specifica openDTrace versione 1.0 presso l'Università di Cambridge.

Annotazioni

DTrace è supportato nelle build Insider di Windows dopo la versione 18980 e Windows Server build 18975.

Script di esempio aggiuntivi

Gli script D aggiuntivi applicabili per gli scenari di Windows sono disponibili nella directory degli esempi del codice sorgente DTrace.

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

Un set di script opentrace toolkit è disponibile all'indirizzo https://github.com/opendtrace/toolkit.

Salve, mondo

Gli script DTrace sono file di testo semplici che contengono comandi ed elementi script di programmazione D.

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

Salvare il file come helloworld.d.

Aprire una finestra del prompt dei comandi come amministratore ed eseguire lo script usando l'opzione -s.

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

Tempo di restituzione di NtCreateUserProcess

È possibile creare script DTrace per tenere traccia del tempo impiegato tra più funzioni/eventi. Di seguito è riportato un semplice esempio che tiene traccia della funzione NtCreateUserProcess tra entry/return per il processo di creazione.


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

Salvare il file come ntcreatetime.d e usare l'opzione -s per eseguire lo script di test.

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

Tracciatore dell'eliminazione dei file

Questo script di esempio usa il provider syscall per strumentare NtOpenFile all'entrata e verifica i flag passati (argomento #5) per monitorare le eliminazioni nel sistema.

Copiare lo script seguente in 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);
        }
    }
}

Usare l'opzione -s per eseguire lo script di test.

Creare o individuare un file da eliminare. Spostare il file nel Cestino e quindi svuotare il Cestino. Quando il file viene eliminato, viene generato un evento e le informazioni sull'eliminazione del file verranno visualizzate.

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

Questo programma è progettato per continuare a monitorare le eliminazioni di file. Premere CTRL+C per uscire.

Per altri esempi di codice di dimensioni maggiori, vedere l'argomento successivo Esempi di codice di DTrace Windows.

Vedere anche

DTrace in Windows

DTrace ETW

Esempi di codice di Windows DTrace

Dump in tempo reale DTrace