Partager via


DTrace

À compter de Windows Server 2025, dtrace il est inclus en tant qu’outil intégré. DTrace est un utilitaire en ligne de commande qui permet aux utilisateurs de surveiller et de déboguer leurs performances système en temps réel. Avec dtrace, les utilisateurs peuvent instrumenter dynamiquement le noyau et le code de l’espace utilisateur sans modifier le code lui-même.

Cet outil puissant prend en charge diverses techniques de collecte et d’analyse de données, notamment les agrégations, les histogrammes et le suivi des événements au niveau de l’utilisateur. Les sondes peuvent être spécifiées dans dtrace des scripts où le script définit les sondes à surveiller et les actions à entreprendre lorsque les sondes se déclenchent. Une sonde est un point spécifique dans le code où les données peuvent être collectées pour effectuer ces actions.

Note

Ce port dtrace intégré diffère du programme d’installation MSI de DTrace pour Windows entourant les paramètres et d’autres fonctionnalités. Pour en savoir plus sur DTrace pour Windows, consultez DTrace sur Windows.

Pour obtenir un guide complet sur l’utilisation de DTrace, consultez le Guide de suivi dynamique.

Enable DTrace

Avant dtrace de pouvoir être utilisé, il doit d’abord être activé. Pour activer dtrace, ouvrez une invite de commandes avec élévation de privilèges ou PowerShell en tant qu’administrateur et exécutez :

bcdedit /set dtrace on

Un redémarrage est nécessaire pour que cette modification prenne effet.

Syntax

dtrace [-BCeFhlqSvVwYZ] [-b bufsz] [-c cmd] [-D name[=def]] [-I path]
[-L path] [-o output] [-p pid] [-s script] [-U name] [-x opt[=val]] [-X a|c|s|t]
[-y symbol path]

[-P provider [[ predicate ] action ]] [-m [ provider: ]
module [[ predicate ] action ]] [-f [[ provider: ] module: ]
func [[ predicate ] action ]] [-n [[[ provider: ] module: ] func: ]
name [[ predicate ] action ]] [-i probe-id [[ predicate ] action ]] [ args ... ]

Note

Les paramètres de dtrace.exe sont sensibles à la casse. Veillez à utiliser la casse correcte lors de la spécification de paramètres pour éviter tout comportement inattendu.

Parameter Description
-b <bufsz> Définit la taille de la mémoire tampon utilisée pour stocker les données de trace , où bufsz est la taille souhaitée de la mémoire tampon en octets, kilo-octets (k), méga-octets (m) ou gigaoctets (g).
-c <cmd> Exécute la commande spécifiée et se ferme une fois qu’elle est terminée, où cmd est la commande que vous souhaitez exécuter avant de démarrer la trace. Si plus d’une instance de -c est utilisée, dtrace se termine lorsque toutes les commandes ont fini de s’exécuter et signale l’état de sortie de chaque processus enfant.
-C Exécute le préprocesseur ucpp sur les fichiers de script avant d’exécuter la trace.
-D <name>=<def> Définit un symbole lors de l’appel du préprocesseur, où name est le nom du symbole à définir et def est une valeur facultative à attribuer au symbole.
-e Quitte après la compilation d’une requête, mais avant d’activer les sondes.
-f Active ou répertorie les sondes qui correspondent au nom de la fonction spécifiée.
-F Combine la sortie de trace par fonction, ce qui facilite l’analyse.
-h Génère un fichier d’en-tête avec des définitions pour les sondes statiques.
-Je <probe-id> Active ou répertorie les sondes qui correspondent à l’ID de sonde spécifié, où probe-id est l’identificateur de la sonde à suivre.
-Je <path> Ajoute le répertoire spécifié au chemin de recherche du préprocesseur, où path est le répertoire que vous souhaitez ajouter et qui contient les fichiers #include .
-l Répertorie les sondes qui correspondent à des critères spécifiés en fonction des paramètres -P, -m, -f, -n, -i et -s . Si ces paramètres ne sont pas spécifiés, toutes les sondes sont répertoriées.
-L <path> Ajoute le répertoire spécifié au chemin de recherche de la bibliothèque, où path est le répertoire de la bibliothèque que vous souhaitez ajouter et qui contient des définitions courantes.
-m Active ou répertorie les sondes qui correspondent au nom de module spécifié dans un argument à l’aide du format provider :module ou module. Si les qualificateurs ne sont pas spécifiés en plus du nom du module, toutes les sondes portant ce nom de module sont mises en correspondance.
-n Active ou répertorie les sondes qui correspondent au nom de sonde spécifié dans un argument à l’aide du format provider :module :function :name, module :function :name, function :name ou name. Si les qualificateurs ne sont pas spécifiés en plus du nom de la sonde, toutes les sondes portant ce nom sont mises en correspondance.
-o <output> Définit le fichier de sortie pour les données de suivi, où output est le nom du fichier que vous souhaitez utiliser pour les données de suivi.
-p <pid> Récupère l’ID de processus (PID) spécifié et met en cache ses tables de symboles, qui peuvent être utilisées pour analyser le comportement du programme.
-P <provider> Active ou répertorie les sondes qui correspondent au nom du fournisseur spécifié, où fournisseur est le nom du fournisseur. Plusieurs instances du paramètre -P peuvent être utilisées en même temps.
-q Définit le mode silencieux, qui génère uniquement des données tracées explicitement.
-s <script> Active ou répertorie les sondes en fonction du script D spécifié, où script est le nom du script que vous souhaitez exécuter. Si l’option -e est spécifiée, le programme est compilé mais aucune collecte de données n’est effectuée. Si -l est spécifié, le programme est compilé et la liste des sondes correspondantes est affichée, mais aucune collecte de données n’est effectuée. Si - e ou -l ne sont pas spécifiés, le programme est compilé, la collecte de données est effectuée en fonction des sondes spécifiées et le traçage commence.
-S Imprime le code intermédiaire du compilateur en langage D pour le débogage dans stderr.
-U <name> Annule la définition d’un symbole lors de l’appel du préprocesseur, où name est le nom du symbole que vous souhaitez dédéfinir.
-v Définit le mode détaillé, qui signale les attributs de stabilité et les arguments.
-V Affiche la version de l’API dtrace.
-w Permet des actions destructrices lorsqu’il est spécifié avec les paramètres -s, -P, -m, -f, -n ou -i . Les actions destructrices peuvent inclure des actions telles que la modification des variables de noyau, la modification du comportement des appels système ou le blocage du système.
-x <opt>=<val> Active ou modifie les options du compilateur et du suivi, où opt est le nom de l’option que vous souhaitez activer ou modifier, et val est une valeur facultative.
-X <a|c|s|t> Contrôle la rigueur de la compilation du code C conformément à la norme ISO C lors de l’appel du cpp. Les arguments disponibles sont les suivants :
  • -Xa (par défaut) : fournit des extensions de compatibilité ISO C plus K&R avec les modifications sémantiques requises par ISO C. La valeur de la macro prédéfinie __STDC__ 0 lorsque cpp est appelé.
  • -Xc (conformité) : fournit une conformité stricte de la norme ISO C sans extensions de compatibilité K&R C. La valeur de la macro prédéfinie __STDC__ 1 lorsque cpp est appelé.
  • -Xs (K&R C) : fournit uniquement K&R C et la macro __STDC__ n’est pas définie lorsque cpp est appelé.
  • -Xt (transition) : Fournit des extensions de compatibilité ISO C plus K&R C sans modifications sémantiques requises par ISO C. La valeur de la macro prédéfinie __STDC__ 0 lorsque cpp est appelé.
-y <symbol path> Définit le chemin de recherche de symboles que le script dtrace doit résoudre, où le chemin d’accès au symbole est le chemin d’accès à la bibliothèque partagée ou au répertoire qui contient les symboles. Pour en savoir plus, consultez Tracés des symboles.
-Y Utilise le chemin de recherche de symbole par défaut pour le script dtrace.
-Z Autorise les descriptions des sondes qui correspondent à zéro sondes pour le débogage.

La liste suivante décrit les descriptions restantes :

  • Prédicat : le prédicat est entouré de barres obliques (/ /) et est une expression D, qui est une expression booléenne qui peut référencer des variables, des constantes et des fonctions. Les prédicats peuvent être utilisés pour filtrer la sortie en fonction de dtrace ces événements. Cette expression est évaluée chaque fois qu’une sonde se déclenche. Si le prédicat a la valeur true, l’action associée est exécutée.

  • Action : l’action est entourée d’accolades ({ }) et est un ensemble d’instructions en langage D qui sont exécutées lorsqu’une sonde se déclenche et que son prédicat associé, le cas échéant, est évalué à true. Les actions peuvent être utilisées pour imprimer des instructions de sortie, enregistrer des données ou effectuer d’autres opérations, telles que l’envoi d’un signal ou la modification d’une variable.

  • Module : composant d’un fournisseur qui contient un ensemble de sondes associées. Les modules peuvent être spécifiés dans dtrace les scripts pour limiter l’étendue du script à un module ou un ensemble spécifique de modules.

  • Func : nom de fonction associé à une sonde. Par exemple, la syscall::NtReadFile sonde est associée à la read fonction. Les fonctions peuvent être spécifiées dans dtrace les scripts pour limiter l’étendue du script à une fonction ou à un ensemble spécifique de fonctions.

  • Args : arguments qui sont passés à l’expression d’action lorsqu’une sonde se déclenche et son prédicat associé, le cas échéant, sont évalués à true. Les arguments peuvent être utilisés pour capturer des données à partir du contexte de la sonde, telles que les valeurs des arguments de fonction ou des valeurs de retour d’appel système. Les arguments peuvent également être utilisés pour transmettre des données entre des sondes ou pour modifier le comportement du script.

Examples

Pour suivre tous les appels système, imprimez le nom de l’exécutable et le nom de l’appel système en cours, exécutez :

dtrace -n 'syscall:::entry { printf("%s called syscall %s", execname, probefunc); }'

Cette commande trace la fonction « function_name » dans le processus avec le PID spécifié et imprime le nom de la fonction, le PID du processus qui l’appelle et le nom de l’exécutable.

dtrace -n 'pid$target::function_name:entry { printf("Function %s called by process %d (%s)", probefunc, pid, execname); }' -p <PID>

Pour obtenir d’autres exemples sur l’utilisation dtrace, consultez Prise en main de DTrace - Commandes en ligne.

See also