Überprüfen von Ablaufverfolgungen für verwaltete Stapel (dotnet-stack)
Dieser Artikel gilt für: ✔️ dotnet-stack
5.0.221401 und höhere Versionen
Installieren
Es gibt zwei Möglichkeiten, dotnet-stack
herunterzuladen und zu installieren:
Globales dotnet-Tool:
Verwenden Sie zum Installieren der neuesten Releaseversion des NuGet-Pakets
dotnet-stack
den Befehl dotnet tool install:dotnet tool install --global dotnet-stack
Direkter Download:
Laden Sie die ausführbare Datei für das Tool herunter, die Ihrer Plattform entspricht:
OS Plattform Windows x86 | x64 | Arm | Arm-x64 Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
Übersicht
dotnet-stack [-h, --help] [--version] <command>
Beschreibung
Das dotnet-stack
-Tool:
- Bei diesem Tool handelt es sich um ein plattformübergreifendes .NET Core-Tool.
- Erfasst und druckt die verwalteten Stapel für alle Threads im .NET-Zielprozess.
- Verwendet die
EventPipe
von der .NET Core-Laufzeit bereitgestellte Ablaufverfolgung.
Optionen
-h|--help
Zeigt die Hilfe für die Befehlszeile an.
--version
Zeigt die Version des Dienstprogramms „dotnet-dump“ an.
Befehle
Command | BESCHREIBUNG |
---|---|
dotnet-stack-Bericht | Gibt die Stapelüberwachung für jeden Thread im Zielprozess aus. |
dotnet-stack ps | Listet die dotnet-Prozesse auf, aus denen Stapelüberwachungen erfasst werden können. |
dotnet-stack symbolicate | Ruft die Zeilennummer aus dem Methodentoken und IL-Offset in einer Stapelüberwachung ab. |
dotnet-stack-Bericht
Gibt die Stapelüberwachung für jeden Thread im Zielprozess aus.
Übersicht
dotnet-stack report -p|--process-id <pid>
-n|--name <process-name>
[-h|--help]
Optionen
-n, --name <name>
Der Name des Prozesses, aus dem der Stapel gemeldet werden soll.
-p|--process-id <PID>
Die Prozess-ID, aus der der Stapel gemeldet werden soll.
dotnet-stack ps
Listet die dotnet-Prozesse auf, aus denen Stapelüberwachungen erfasst werden können.
Ab dotnet-stack
-Version 6.0.320703 werden auch die Befehlszeilenargumente angezeigt, mit denen jeder Prozess gestartet wurde, sofern verfügbar.
Übersicht
dotnet-stack ps [-h|--help]
Beispiel
Angenommen, Sie starten eine zeitintensive App mit dem Befehl dotnet run --configuration Release
. In einem anderen Fenster führen Sie den Befehl dotnet-stack ps
aus. Die Ausgabe sieht wie folgt aus. Sofern vorhanden, werden die Befehlszeilenargumente ab dotnet-stack
-Version 6.0.320703 angezeigt.
> dotnet-stack ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
dotnet-stack symbolicate
Ruft die Zeilennummer aus dem Methodentoken und IL-Offset in einer Stapelüberwachung ab.
Übersicht
dotnet-stack symbolicate <input-path> [-d|--search-dir] [-o|--output] [-c|--stdout] [-h|--help]
Optionen
-d, --search-dir <directory1 directory2 ...>
Pfad mehrerer Verzeichnisse mit Assembly und PDB-Datei.
-o, --output <output-path>
Ausgabe direkt in eine Datei.
-c, --stdout
Ausgabe direkt in eine Konsole.
Beispiel
> cat stack.trace
Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
at DotnetStackSymbolicate.App.MethodA() in DotnetStackSymbolicate.dll:token 0x6000002+0x6
at DotnetStackSymbolicate.App..ctor() in DotnetStackSymbolicate.dll:token 0x6000003+0x51
at DotnetStackSymbolicate.Program.OnCreate() in DotnetStackSymbolicate.Tizen.dll:token 0x6000001+0x8
onSigabrt called
>
> dotnet-stack symbolicate stack.trace --stdout
Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
at DotnetStackSymbolicate.App.MethodA() in C:\DotnetStackSymbolicate\DotnetStackSymbolicate.cs:line 19
at DotnetStackSymbolicate.App..ctor() in C:\DotnetStackSymbolicate\DotnetStackSymbolicate.cs:line 38
at DotnetStackSymbolicate.Program.OnCreate() in C:\DotnetStackSymbolicate.Tizen\DotnetStackSymbolicate.Tizen.cs:line 12
onSigabrt called
Output: stack.trace.symbolicated
Mit dotnet-stack verwaltete Stapel melden
So melden Sie verwaltete Stapel dotnet-stack
:
Ermitteln Sie die Prozess-ID (PID) der .NET Core-Anwendung, um die verwalteten Stapel von dort zu melden.
- Unter Windows können Sie z. B. den Task-Manager oder den
tasklist
-Befehl verwenden. - Verwenden Sie unter Linux beispielsweise den
ps
-Befehl. - dotnet-stack ps
- Unter Windows können Sie z. B. den Task-Manager oder den
Führen Sie den folgenden Befehl aus:
dotnet-stack report --process-id <PID>
Der oben gezeigte Befehl generiert eine Ausgabe ähnlich der folgenden:
Thread (0x48839B): [Native Frames] System.Console!System.IO.StdInReader.ReadKey(bool&) System.Console!System.IO.SyncTextReader.ReadKey(bool&) System.Console!System.ConsolePal.ReadKey(bool) System.Console!System.Console.ReadKey() StackTracee!Tracee.Program.Main(class System.String[])
Die Ausgabe von
dotnet-stack
folgt der folgenden Form:- Kommentaren in der Ausgabe wird das Präfix
#
vorangestellt. - Jeder Thread verfügt über einen Header, der die native Thread-ID enthält:
Thread (<thread-id>):
. - Stapelrahmen folgen dem Format
Module!Method
. - Übergänge zu nicht verwaltetem Code werden wie folgt in der Ausgabe dargestellt
[Native Frames]
.
# comment Thread (0x1234): module!Method module!Method Thread (0x5678): [Native Frames] Module!Method Module!Method
- Kommentaren in der Ausgabe wird das Präfix
Hinweis
Das Beenden des Prozesses kann bei sehr großen Anwendungen möglicherweise lang (bis zu mehrere Minuten) dauern. Die Runtime muss die Typ- und Methodeninformationen für den gesamten verwalteten Code senden, der erfasst wurde, um Funktionsnamen aufzulösen.