DTrace
À partir de Windows Server 2025, dtrace
est inclus en tant qu’outil intégré. DTrace est un utilitaire de 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 code du noyau et 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, y compris les agrégations, les histogrammes et le traçage des événements au niveau de l’utilisateur. Les sondes peuvent être spécifiées dans des scripts dtrace
, qui définissent celles qui doivent être surveillées et les actions à entreprendre lorsqu’elles 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.
Remarque
Ce port intégré de dtrace
se distingue du programme d’installation MSI de DTrace pour Windows en ce qui concerne 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 du traçage dynamique.
Activer DTrace
Avant d’utiliser dtrace
, il faut d’abord l’activer. 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 soit appliquée
Syntaxe
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 ... ]
Remarque
Les paramètres de dtrace.exe respectent la casse. Veillez à utiliser la casse correcte lors de la spécification de paramètres pour éviter tout comportement imprévu.
Paramètre | 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égaoctets (m) ou gigaoctets (g). |
-c <cmd> |
Exécute la commande spécifiée et s’arrête une fois celle-ci terminée, où cmd est la commande que vous souhaitez exécuter avant de commencer la trace. Si plusieurs instances de -c sont utilisées, dtrace s’arrête lorsque toutes les commandes ont fini de s’exécuter et indique 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ù nom est le nom du symbole à définir, et def est une valeur facultative à affecter au symbole. |
-e | Se ferme après la compilation d’une requête, mais avant l’activation des 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. |
-i <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 à tracer. |
-I <path> |
Ajoute le répertoire spécifié au chemin de recherche du préprocesseur, où path est le répertoire que vous souhaitez ajouter qui contient les fichiers #include. |
-l | Répertorie les sondes qui correspondent aux 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 bibliothèques que vous souhaitez ajouter qui contient des définitions courantes. |
-m | Active ou répertorie les sondes qui correspondent au nom du module spécifié dans un argument en utilisant le format provider :module ou module. Si aucun qualificateur n’est spécifié 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 au format provider:module:function:name, module:function:name, function:name ou name. Si aucun qualificateur n’est spécifié 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 trace, où l’output est le nom du fichier que vous souhaitez utiliser pour les données de trace. |
-p <pid> |
Récupère l’ID de processus (PID) spécifié et met en cache ses tables de symboles, que l’on peut utiliser pour analyser le comportement du programme. |
-P <provider> |
Active ou répertorie les sondes qui correspondent au nom du fournisseur spécifié, où provider 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 -e est spécifié, 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 mises en correspondance s’affiche, 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 de langage D pour le débogage sur 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 annuler la définition. |
-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 | Autorise les actions destructrices lorsqu’elles sont spécifiées avec les paramètres -s, -P, -m, -f, -n ou -i. Les actions destructrices comprennent notamment la modification des variables du noyau, le changement du comportement des appels système ou le plantage du système. |
-x <opt> =<val> |
Active ou modifie les options de compilation et de traçage, où opt est le nom de l’option que vous souhaitez activer ou modifier et val une valeur facultative. |
-X <a|c|s|t> |
Contrôle le degré de conformité du code C en cours de compilation à la norme ISO C lors de l’appel du cpp. Les arguments suivants sont disponibles :
|
-y <symbol path> |
Définit le chemin de recherche de symboles pour le script dtrace à résoudre, où symbol path est le chemin d’accès à la bibliothèque ou au répertoire partagé qui contient les symboles. Pour en savoir plus, consultez Chemins de symboles. |
-y | Utilise le chemin de recherche de symboles default pour le script dtrace. |
Z- | Autorise les descriptions de sondes qui correspondent à zéro sondes pour le débogage. |
La liste suivante présente les descriptions restantes :
Prédicat : le prédicat est placé entre des barres obliques (
/ /
) et est une expression D, c’est-à-dire 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 dedtrace
en fonction de ces événements. Cette expression est évaluée chaque fois qu’une sonde se déclenche. Si l’évaluation du prédicat est true, l’action associée est exécutée.Action : l’action est placée entre des accolades (
{ }
) et est un ensemble d’instructions de langage D qui sont exécutées lorsqu’une sonde se déclenche et son prédicat associé, le cas échéant, prend la valeur true. Les actions peuvent être utilisées pour imprimer des instructions de sortie, enregistrer des données ou effectuer d’autres opérations, notamment 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 des scripts
dtrace
afin de limiter le champ d’application du script à un module spécifique ou à un ensemble de modules.Func : nom de fonction associé à une sonde. Par exemple, la sonde
syscall::NtReadFile
est associée à la fonctionread
. Les fonctions peuvent être spécifiées dans des scriptsdtrace
afin de limiter le champ d’application du script à une fonction spécifique ou à un ensemble de fonctions.Args : arguments qui sont transmis à l’expression d’action lorsqu’une sonde se déclenche et que son prédicat associé, le cas échéant, est évalué sur true. Les arguments peuvent être utilisés pour capturer des données du contexte de la sonde, notamment les valeurs des arguments de fonction ou des valeurs de retour d’appel système. Ils peuvent également être utilisés pour transmettre des données entre des sondes ou pour modifier le comportement du script.
Exemples
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 de dtrace
, consultez Bien démarrer avec DTrace - Commandes en une ligne.