Freigeben über


DTrace

Ab Windows Server 2025 dtrace ist als integriertes Tool enthalten. DTrace ist ein Befehlszeilenprogramm, mit dem Benutzer ihre Systemleistung in Echtzeit überwachen und debuggen können. Benutzer dtracekönnen den Kernel- und Benutzerraumcode dynamisch instrumentieren, ohne den Code selbst zu ändern.

Dieses leistungsstarke Tool unterstützt verschiedene Datenerfassungs- und Analysetechniken, einschließlich Aggregationen, Histogramme und Ablaufverfolgung von Ereignissen auf Benutzerebene. Probes können in Skripts angegeben werden, in dtrace denen das Skript die zu überwachenden Probes definiert, und die Aktionen, die ausgeführt werden sollen, wenn die Probe ausgelöst wird. Ein Prüfpunkt ist ein bestimmter Punkt im Code, an dem Daten gesammelt werden können, um diese Aktionen auszuführen.

Note

Dieser integrierte Port dtrace unterscheidet sich vom MSI-Installationsprogramm von DTrace für Windows umgebende Parameter und andere Funktionen. Weitere Informationen zu DTrace für Windows finden Sie unter DTrace unter Windows.

Eine umfassende Anleitung zur Verwendung von DTrace finden Sie im Leitfaden zur dynamischen Ablaufverfolgung.

Enable DTrace

Bevor dtrace sie verwendet werden kann, muss sie zuerst aktiviert werden. Um dies zu aktivieren dtrace, öffnen Sie eine Eingabeaufforderung mit erhöhten Rechten oder PowerShell als Administrator, und führen Sie Folgendes aus:

bcdedit /set dtrace on

Ein Neustart ist erforderlich, damit diese Änderung wirksam wird.

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

Bei den Parametern für dtrace.exe wird zwischen Groß- und Kleinschreibung unterschieden. Stellen Sie sicher, dass Sie beim Angeben von Parametern die richtige Groß-/Kleinschreibung verwenden, um unerwartetes Verhalten zu vermeiden.

Parameter Description
-b <bufsz> Legt die Größe des Puffers fest, der zum Speichern von Ablaufverfolgungsdaten verwendet wird, wobei bufsz die gewünschte Größe des Puffers in Bytes, Kilobyte (k), Megabyte (m) oder Gigabyte (g) ist.
-c <cmd> Führt den angegebenen Befehl aus und wird nach Abschluss beendet, wobei cmd der Befehl ist, den Sie ausführen möchten, bevor Sie die Ablaufverfolgung starten. Wenn mehr als eine Instanz von -c verwendet wird, wird dtrace beendet, wenn die Ausführung aller Befehle abgeschlossen ist, und meldet den Beendigungsstatus für jeden untergeordneten Prozess.
-C Führt den ucpp-Vorprozessor auf Skriptdateien aus, bevor die Ablaufverfolgung ausgeführt wird.
-D <name>=<def> Definiert ein Symbol beim Aufrufen des Präprozessors, wobei name der Name des zu definierenden Symbols ist und def ein optionaler Wert ist, der dem Symbol zugewiesen wird.
-e Beendet nach dem Kompilieren einer Anforderung, aber vor dem Aktivieren von Probes.
-f Aktiviert oder listet Prüfpunkte auf, die dem angegebenen Funktionsnamen entsprechen.
-F Kombiniert die Ablaufverfolgungsausgabe nach Funktion und erleichtert die Analyse.
-h Generiert eine Headerdatei mit Definitionen für statische Probes.
-Ich <probe-id> Aktiviert oder listet Tests auf, die mit der angegebenen Test-ID übereinstimmen, wobei probe-id der Bezeichner für den zu verfolgenden Test ist.
-Ich <path> Fügt das angegebene Verzeichnis dem Präprozessor-Suchpfad hinzu, wobei Pfad das Verzeichnis ist, das Sie hinzufügen möchten und das die #include Dateien enthält.
-l Listet Tests auf, die auf den Parametern -P, -m, -f, -n, -i und -s basieren. Wenn diese Parameter nicht angegeben sind, werden alle Probes aufgelistet.
-L <path> Fügt das angegebene Verzeichnis dem Bibliothekssuchpfad hinzu, wobei Pfad das Bibliotheksverzeichnis ist, das Sie hinzufügen möchten und das allgemeine Definitionen enthält.
-m Aktiviert oder listet Tests auf, die mit dem angegebenen Modulnamen in einem Argument im Format provider:module oder module übereinstimmen. Wenn Qualifizierer nicht neben dem Modulnamen angegeben werden, werden alle Probes mit diesem Modulnamen übereinstimmen.
-n Aktiviert oder listet Tests auf, die mit dem angegebenen Testnamen in einem Argument übereinstimmen, und verwendet das Format provider:module:function:name, module:function:name, function:name oder name. Wenn Qualifizierer nicht neben dem Probenamen angegeben werden, werden alle Probes mit diesem Namen übereinstimmen.
-o <output> Legt die Ausgabedatei für die Ablaufverfolgungsdaten fest, wobei output der Name der Datei ist, die Sie für die Ablaufverfolgungsdaten verwenden möchten.
-p <pid> Greift die angegebene Prozess-ID (PID) ab und speichert die Symboltabellen zwischen, mit denen das Verhalten des Programms analysiert werden kann.
-P <provider> Aktiviert oder listet Tests auf, die mit dem angegebenen Anbieternamen übereinstimmen, wobei Anbieter der Name des Anbieters ist. Es können mehrere Instanzen des Parameters -P gleichzeitig verwendet werden.
-q Legt den stillen Modus fest, der nur explizit nachverfolgte Daten ausgibt.
-s <script> Aktiviert oder listet Tests gemäß dem angegebenen D-Skript auf, wobei Skript der Name des Skripts ist, das Sie ausführen möchten. Wenn -e angegeben ist, wird das Programm kompiliert, aber es wird keine Datenerfassung durchgeführt. Wenn -l angegeben ist, wird das Programm kompiliert, und die Liste der übereinstimmenden Tests wird angezeigt, aber es wird keine Datenerfassung durchgeführt. Wenn -e oder -l nicht angegeben sind, wird das Programm kompiliert, die Datenerfassung wird gemäß den angegebenen Prüfpunkten durchgeführt, und die Ablaufverfolgung beginnt.
-S Gibt den Zwischencode des D-Compilers für das Debuggen in stderr aus.
-U <name> Hebt die Definition eines Symbols beim Aufrufen des Präprozessors auf, wobei name der Name des Symbols ist, dessen Definition Sie aufheben möchten.
-v Legt ausführlichen Modus fest, der Stabilitätsattribute und Argumente meldet.
-V Zeigt die Version der dtrace-API an.
-w Lässt destruktive Aktionen zu, wenn sie mit den Parametern -s, -P, -m, -f, -n oder -i angegeben werden. Destruktive Aktionen können Aktionen wie das Ändern von Kernelvariablen, das Ändern des Verhaltens von Systemaufrufen oder das Absturzen des Systems umfassen.
-x <opt>=<val> Aktiviert oder ändert die Compiler- und Ablaufverfolgungsoptionen, wobei opt der Name der Option ist, die Sie aktivieren oder ändern möchten, und val ein optionaler Wert ist.
-X <a|c|s|t> Steuert, wie streng der kompilierte C-Code beim Aufrufen des Cpp dem ISO C-Standard entspricht. Die verfügbaren Argumente sind:
  • -Xa (Standard): Bietet ISO C plus K&R-Kompatibilitätserweiterungen mit semantischen Änderungen, die von ISO C benötigt werden. Das vordefinierte Makro __STDC__ hat den Wert 0 , wenn cpp aufgerufen wird.
  • -Xc (Konformität): Stellt eine strenge Konformität von ISO C ohne K&R C-Kompatibilitätserweiterungen bereit. Das vordefinierte Makro __STDC__ hat den Wert 1 , wenn cpp aufgerufen wird.
  • -Xs (K&R C): Stellt nur K&R C bereit, und das __STDC__ Makro ist nicht definiert, wenn cpp aufgerufen wird.
  • -Xt (Übergang): Bietet ISO C und K&R C-Kompatibilitätserweiterungen ohne semantische Änderungen, die von ISO C erforderlich sind. Das vordefinierte Makro __STDC__ hat den Wert 0 , wenn cpp aufgerufen wird.
-y <symbol path> Legt den Symbolsuchpfad fest, den das dtrace-Skript auflösen soll, wobei symbolpfad der Pfad zur gemeinsam genutzten Bibliothek oder zum freigegebenen Verzeichnis ist, das die Symbole enthält. Weitere Informationen finden Sie unter Symbolpfade.
-Y Verwendet den Standard-Symbolsuchpfad für das dtrace-Skript.
-Z Ermöglicht Probebeschreibungen, die mit Nullsonden für das Debuggen übereinstimmen.

In der folgenden Liste werden die verbleibenden Beschreibungen beschrieben:

  • Prädikat: Das Prädikat ist in Schrägstriche (/ /) eingeschlossen und ist ein D-Ausdruck, bei dem es sich um einen booleschen Ausdruck handelt, der auf Variablen, Konstanten und Funktionen verweisen kann. Prädikate können verwendet werden, um die Ausgabe dtrace basierend auf diesen Ereignissen zu filtern. Dieser Ausdruck wird jedes Mal ausgewertet, wenn eine Probe ausgelöst wird. Wenn das Prädikat als wahr ausgewertet wird, wird die zugeordnete Aktion ausgeführt.

  • Aktion: Die Aktion ist in geschweifte Klammern ({ }) eingeschlossen und besteht aus einem Satz von Anweisungen in der Sprache D, die ausgeführt werden, wenn ein Prüfpunkt ausgelöst wird, und das zugehörige Prädikat, falls vorhanden, als wahr ausgewertet wird. Aktionen können verwendet werden, um Ausgabeanweisungen zu drucken, Daten aufzuzeichnen oder andere Vorgänge auszuführen, z. B. das Senden eines Signals oder das Ändern einer Variablen.

  • Modul: Eine Komponente eines Anbieters, die einen Satz verwandter Tests enthält. Module können in dtrace Skripts angegeben werden, um den Umfang des Skripts auf ein bestimmtes Modul oder eine Gruppe von Modulen zu beschränken.

  • Func: Ein Funktionsname, der einem Test zugeordnet ist. Der Prüfpunkt ist beispielsweise syscall::NtReadFile der read Funktion zugeordnet. Funktionen können in dtrace Skripts angegeben werden, um den Umfang des Skripts auf eine bestimmte Funktion oder einen Satz von Funktionen zu beschränken.

  • Argumente: Die Argumente, die an den Aktionsausdruck übergeben werden, wenn ein Test ausgelöst wird, und das zugehörige Prädikat, falls vorhanden, als wahr ausgewertet wird. Args können verwendet werden, um Daten aus dem Prüfpunktkontext zu erfassen, z. B. die Werte von Funktionsargumenten oder Rückgabewerte des Systemaufrufs. Args können auch verwendet werden, um Daten zwischen Probes zu übergeben oder das Verhalten des Skripts zu ändern.

Examples

Führen Sie zum Nachverfolgen aller Systemaufrufe den Namen der ausführbaren Datei und den Namen des ausgeführten Systemaufrufs aus:

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

Dieser Befehl verfolgt die Funktion "function_name" im Prozess mit der angegebenen PID und druckt den Namen der Funktion, die PID des Prozesses, der sie aufruft, und den Namen der ausführbaren Datei.

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

Weitere Beispiele zur Verwendung dtracefinden Sie unter "Erste Schritte mit DTrace – EinZeilbefehle".

See also