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.