Delen via


Beheerde stack-traceringen inspecteren (dotnet-stack)

Dit artikel is van toepassing op: ✔️ dotnet-stack versie 5.0.221401 en nieuwere versies

Installeren

Er zijn twee manieren om te downloaden en installeren dotnet-stack:

Samenvatting

dotnet-stack [-h, --help] [--version] <command>

Beschrijving

Het dotnet-stack hulpprogramma:

  • Is een platformoverschrijdend .NET Core-hulpprogramma.
  • Hiermee worden de beheerde stacks vastgelegd en afgedrukt voor alle threads in het .NET-doelproces.
  • EventPipe Maakt gebruik van tracering die wordt geleverd door de .NET Core-runtime.

Opties

  • -h|--help

    Toont opdrachtregelhulp.

  • --version

    Geeft de versie van het hulpprogramma dotnet-stack weer.

Opdrachten

Opdracht Beschrijving
dotnet stack rapport Print de stacktrace voor elke thread in het doelproces af.
dotnet-stack ps Somt de dotnet-processen op waarvan stacktraces kunnen worden verzameld.
dotnet-stack symbolicate Haal het regelnummer op uit het methodetoken en IL-offset in een stacktrace.

dotnet-stack-rapport

Hiermee wordt de stacktrace van elke thread in het doelproces afgedrukt.

Samenvatting

dotnet-stack report -p|--process-id <pid>
                    -n|--name <process-name>
                    [-h|--help]

Opties

  • -n, --name <name>

    De naam van het proces waaruit de stack gerapporteerd moet worden.

  • -p|--process-id <PID>

    De proces-id waarvan de stack moet worden gerapporteerd.

dotnet-stack ps

Geeft een lijst weer van de dotnet-processen waarvan stack-traces kunnen worden verzameld. dotnet-stack versie 6.0.320703 en latere versies geven ook de opdrachtregelargumenten weer waarmee elk proces is gestart, indien beschikbaar.

Samenvatting

dotnet-stack ps [-h|--help]

Voorbeeld

Stel dat u een langlopende app start met behulp van de opdracht dotnet run --configuration Release. In een ander venster voert u de dotnet-stack ps opdracht uit. De uitvoer die u ziet, is als volgt. De opdrachtregelargumenten, indien aanwezig, worden weergegeven in dotnet-stack versie 6.0.320703 en hoger.

> dotnet-stack ps
  
  21932 dotnet     C:\Program Files\dotnet\dotnet.exe   run --configuration Release
  36656 dotnet     C:\Program Files\dotnet\dotnet.exe

dotnet-stack symboliseren

Haal het regelnummer op uit het methodetoken en IL-offset in een stacktrace.

Samenvatting

dotnet-stack symbolicate <input-path> [-d|--search-dir] [-o|--output] [-c|--stdout] [-h|--help]

Opties

  • -d, --search-dir <directory1 directory2 ...>

    Pad naar meerdere mappen met assembly en pdb.

  • -o, --output <output-path>

    Uitvoer rechtstreeks naar een bestand.

  • -c, --stdout

    Uitvoer rechtstreeks naar een console.

Voorbeeld

> 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

Beheerde stacks rapporteren met dotnet-stack

Beheerde stacks rapporteren met behulp van dotnet-stack:

  • Haal de proces-id (PID) van de .NET Core-toepassing op waaruit stacks moeten worden gerapporteerd.

    • In Windows kunt u bijvoorbeeld Taakbeheer of de tasklist opdracht gebruiken.
    • In Linux bijvoorbeeld de ps opdracht.
    • dotnet-stack ps
  • Voer de volgende opdracht uit:

    dotnet-stack report --process-id <PID>
    

    Met de voorgaande opdracht wordt uitvoer gegenereerd die vergelijkbaar is met de volgende:

    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[])
    

    De uitvoer van dotnet-stack volgt de volgende vorm:

    • Opmerkingen in de uitvoer worden voorafgegaan door #.
    • Elke thread heeft een header die de systeemeigen thread-id bevat: Thread (<thread-id>):.
    • Stackframes volgen de vorm Module!Method.
    • Overgangen naar onbeheerde code worden weergegeven als [Native Frames] in de uitvoer.
    # comment
    Thread (0x1234):
      module!Method
      module!Method
    
    Thread (0x5678):
      [Native Frames]
      Module!Method
      Module!Method
    

Notitie

Het stoppen van het proces kan lang duren (maximaal enkele minuten) voor zeer grote toepassingen. De runtime moet de type- en methode-informatie verzenden voor alle beheerde code die is vastgelegd om de functienamen te bepalen.

Volgende stappen