Freigeben über


Ü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
  • 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
    

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.

Nächste Schritte