DTrace

Ab Windows Server 2025 ist dtrace als integriertes Tool enthalten. DTrace ist ein Befehlszeilenprogramm, mit dem Benutzer die Systemleistung in Echtzeit überwachen und debuggen können. Mit dtrace können Benutzer den Kernel- und Benutzerbereichscode 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. Prüfpunkte können in dtrace-Skripts angegeben werden, wobei das Skript die zu überwachenden Prüfpunkte und die Aktionen definiert, die beim Auslösen der Prüfpunkte durchgeführt werden sollen. Ein Prüfpunkt ist ein bestimmter Punkt im Code, an dem Daten gesammelt werden können, um diese Aktionen auszuführen.

Hinweis

Dieser integrierte Port von dtrace unterscheidet sich vom MSI-Installationsprogramm von DTrace für Windows in Bezug auf 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.

Aktivieren von DTrace

Bevor dtrace verwendet werden kann, muss das Tool zuerst aktiviert werden. Öffnen Sie zum Aktivieren von dtrace 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 ... ]

Hinweis

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

Parameter Beschreibung
-b <bufsz> Legt die Größe des Puffers fest, der zum Speichern der Ablaufverfolgungsdaten verwendet wird. Dabei gilt Folgendes: bufsz ist die gewünschte Größe des Puffers in Bytes, Kilobytes (k), Megabytes (m) oder Gigabytes (g).
-c <cmd> Führt den angegebenen Befehl aus und beendet ihn nach Abschluss. Dabei sollte cmd vor dem Starten der Ablaufverfolgung ausgeführt werden. Wenn mehr als eine Instanz von -c verwendet wird, wird dtrace beendet, wenn die Ausführung aller Befehle abgeschlossen ist, und der Beendigungsstatus wird für jeden untergeordneten Prozess gemeldet.
-C Führt den ucpp-Präprozessor für Skriptdateien aus, bevor die Ablaufverfolgung ausgeführt wird.
-D <name>=<def> Definiert ein Symbol beim Aufrufen des Präprozessors. Dabei ist name der Name des zu definierenden Symbols und def ein optionaler Wert, der dem Symbol zugewiesen wird.
-e Dient zum Beenden nach dem Kompilieren einer Anforderung, aber vor dem Aktivieren von Prüfpunkten.
f- Aktiviert oder listet Prüfpunkte auf, die dem angegebenen Funktionsnamen entsprechen.
F- Kombiniert die Ablaufverfolgungsausgabe nach Funktion und erleichtert so die Analyse.
-h Generiert eine Headerdatei mit Definitionen für statische Prüfpunkte.
-i <probe-id> Aktiviert oder listet Prüfpunkte auf, die mit der angegebenen Prüfpunkt-ID übereinstimmen. Dabei ist probe-id der Bezeichner für den Prüfpunkt, der nachverfolgt werden soll.
-I <path> Fügt das angegebene Verzeichnis dem Suchpfad des Präprozessors hinzu. Dabei ist path das Verzeichnis, das Sie hinzufügen möchten und das die #include-Dateien enthält.
-l Listet Prüfpunkte auf, die angegebenen Kriterien basierend auf den Parametern -P, -m, -f, -n, -i und -s entsprechen. Wenn diese Parameter nicht angegeben sind, werden alle Prüfpunkte aufgelistet.
-L <path> Fügt das angegebene Verzeichnis dem Bibliothekssuchpfad hinzu. Dabei steht path für das Bibliotheksverzeichnis, das Sie hinzufügen möchten und das allgemeine Definitionen enthält.
-m Aktiviert oder listet Prüfpunkte auf, die dem angegebenen Modulnamen in einem Argument im Format provider:module oder module entsprechen. Wenn neben dem Modulnamen keine Qualifizierer angegeben sind, werden alle Prüfpunkte mit diesem Modulnamen abgeglichen.
-n Aktiviert oder listet Prüfpunkte auf, die dem angegebenen Prüfpunktnamen in einem Argument im Format provider:module:function:name, module:function:name, function:name oder name entsprechen. Wenn neben dem Prüfpunktnamen keine Qualifizierer angegeben sind, werden alle Prüfpunkte mit diesem Namen abgeglichen.
-o <output> Legt die Ausgabedatei für die Ablaufverfolgungsdaten fest. Dabei ist output der Name der Datei, die Sie für die Ablaufverfolgungsdaten verwenden möchten.
-p <pid> Ruft 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 Prüfpunkte auf, die dem angegebenen Anbieternamen entsprechen. Dabei ist provider der Name des Anbieters. Vom Parameter -P können mehrere Instanzen gleichzeitig verwendet werden.
-q Legt den stillen Modus fest, in dem nur explizit nachverfolgte Daten ausgegeben werden.
-s <script> Aktiviert oder listet Prüfpunkte gemäß dem angegebenen D-Skript auf. Dabei ist script der Name des Skripts, das Sie ausführen möchten. Wenn -e angegeben ist, wird das Programm kompiliert, aber keine Datensammlung ausgeführt. Wenn -l angegeben ist, wird das Programm kompiliert, und die Liste der gefundenen Prüfpunkte wird angezeigt, es wird jedoch keine Datensammlung ausgeführt. Wenn -e oder -l nicht angegeben ist, wird das Programm kompiliert, die Datensammlung erfolgt entsprechend den angegebenen Prüfpunkten, und die Ablaufverfolgung beginnt.
-S Gibt den Zwischencode für den D-Sprachcompiler zum Debuggen an stderr aus.
-U <name> Hebt die Definition eines Symbols beim Aufrufen des Präprozessors auf Dabei ist name der Name des Symbols, dessen Definition Sie aufheben möchten.
-v Legt den ausführlichen Modus fest, der Stabilitätsattribute und Argumente meldet.
-V Zeigt die Version der dtrace-API an.
-w Ermöglicht bei der Angabe mit den Parametern -s, -P, -m, -f, -n oder -i destruktive Aktionen. Zu destruktiven Aktionen gehören beispielsweise die Änderung von Kernelvariablen, die Änderung des Verhaltens von Systemaufrufen oder der Absturz des Systems.
-x <opt>=<val> Aktiviert oder ändert die Compiler- und Ablaufverfolgungsoptionen. Dabei ist opt der Name der Option, die Sie aktivieren oder ändern möchten, und val ist ein optionaler Wert.
-X <a|c|s|t> Steuert, wie strikt sich der zu kompilierende C-Code beim Aufrufen von cpp an den ISO C-Standard hält. Verfügbare Argumente:
  • -Xa (Standardwert): Stellt ISO C sowie K&R-Kompatibilitätserweiterungen mit den von ISO C vorgeschriebenen semantischen Änderungen bereit. Das vordefinierte Makro „__STDC__“ hat den Wert 0, wenn cpp aufgerufen wird.
  • -Xc (Konformität): Bietet eine strenge Konformität mit ISO C ohne K&R C-Kompatibilitätserweiterungen. Das vordefinierte Makro „__STDC__“ hat den Wert 1, wenn cpp aufgerufen wird.
  • -Xs (K&R C): Bietet nur K&R C, und das Makro „__STDC__“ wird beim Aufrufen von cpp nicht definiert.
  • -Xt (Übergang): Stellt ISO C sowie K&R C-Kompatibilitätserweiterungen ohne die von ISO C vorgeschriebenen semantischen Änderungen bereit. Das vordefinierte Makro „__STDC__“ hat den Wert 0, wenn cpp aufgerufen wird.
-y <symbol path> Legt den Symbolsuchpfad für das dtrace-Skript fest, der aufgelöst werden soll. Dabei ist symbol path der Pfad zu der freigegebenen Bibliothek oder dem freigegebenen Verzeichnis, die bzw. das die Symbole enthält. Weitere Informationen finden Sie unter Symbolpfade.
-y Verwendet den standardmäßigen Symbolsuchpfad für das dtrace-Skript.
Z- Ermöglicht Prüfpunktbeschreibungen, die mit keinen Prüfpunkten für das Debuggen übereinstimmen.

In der folgenden Liste sind die übrigen Beschreibungen aufgeführt:

  • Prädikat: Das Prädikat wird 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 von dtrace basierend auf diesen Ereignissen zu filtern. Dieser Ausdruck wird jedes Mal ausgewertet, wenn ein Prüfpunkt 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 ist eine Reihe von D-Sprachanweisungen, 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 auszugeben, Daten aufzuzeichnen oder andere Vorgänge auszuführen, z. B. Senden eines Signals oder Ändern einer Variablen.

  • Modul: Eine Komponente eines Anbieters, die verwandte Prüfpunkte 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.

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

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

Beispiele

Führen Sie Folgendes aus, um alle Systemaufrufe nachzuverfolgen und den Namen der ausführbaren Datei und den Namen des ausgeführten Systemaufrufs auszugeben:

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

Dieser Befehl verfolgt die Funktion „function_name“ im Prozess mit der angegebenen PID nach und gibt den Namen der Funktion, die PID des Prozesses, der sie aufruft, und den Namen der ausführbaren Datei aus.

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

Weitere Beispiele zur Verwendung von dtrace finden Sie unter Erste Schritte mit DTrace – Einzeilige Befehle.

Weitere Informationen