Partager via


Programmation DTrace

DTrace prend en charge le langage de programmation D. Cette rubrique explique comment commencer à écrire et à utiliser des scripts DTrace.

Pour obtenir des informations générales sur DTrace sur Windows, consultez DTrace.

Pour plus d’informations sur DTrace, consultez la spécification OpenDTrace version 1.0 à l’Université de Cambridge.

Notes

DTrace est pris en charge dans les builds Insider de Windows après la version 18980 et Windows Server build 18975.

Exemples de scripts supplémentaires

Des scripts D supplémentaires applicables aux scénarios Windows sont disponibles dans le répertoire d’exemples du code source DTrace.

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

Un ensemble de scripts opentrace toolkit est disponible à l’adresse https://github.com/opendtrace/toolkit.

Hello World

Les scripts DTrace sont des fichiers texte simples qui contiennent des commandes et des éléments de script de programmation D.

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

Enregistrez le fichier sous helloworld.d.

Ouvrez une fenêtre d’invite de commandes en tant qu’administrateur et exécutez le script à l’aide de l’option -s.

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

Temps de retour NtCreateUserProcess

Vous pouvez créer des scripts DTrace pour suivre le temps nécessaire à plusieurs fonctions/événements. Voici un exemple simple qui effectue le suivi de la fonction NtCreateUserProcess entre l’entrée et le retour pour le processus de création.


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

Enregistrez le fichier sous ntcreatetime.d et utilisez l’option -s pour exécuter le script de 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

Suivi de la suppression de fichiers

Cet exemple de script utilise le fournisseur syscall pour instrumenter NtOpenFile lors de l’entrée et recherche l’indicateur passé (argument n°5) pour suivre les suppressions dans le système.

Copiez le script ci-dessous dans 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);
        }
    }
}

Utilisez l’option -s pour exécuter le script de test.

Créez ou recherchez un fichier que vous souhaitez supprimer. Déplacez le fichier vers la Corbeille, puis videz-la. Lorsque le fichier est supprimé, l’événement se déclenche et les informations relatives à la suppression du fichier s’affichent.

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

Ce programme est conçu pour continuer à surveiller les suppressions de fichiers. Appuyez sur Ctrl+C pour quitter.

Pour obtenir d’autres exemples de code plus volumineux, consultez la rubrique suivante, Exemples de code Windows DTrace.

Voir aussi

DTrace sur Windows

DTrace ETW

Exemples de code Windows DTrace

DTrace Live Dump