Dela via


Inspektera spårningar av hanterade stackar (dotnet-stack)

Den här artikeln gäller för: ✔️ dotnet-stack version 5.0.221401 och senare versioner

Installera

Det finns två sätt att ladda ned och installera dotnet-stack:

Sammanfattning

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

beskrivning

Verktyget dotnet-stack :

  • Är ett plattformsoberoende .NET Core-verktyg.
  • Samlar in och skriver ut de hanterade staplarna för alla trådar i .NET-målprocessen.
  • Använder spårning som tillhandahålls EventPipe av .NET Core-körningen.

Alternativ

  • -h|--help

    Visar kommandoradshjälp.

  • --version

    Visar versionen av verktyget dotnet-stack.

Kommandon

Kommando beskrivning
dotnet-stack-rapport Skriver ut stackspårningen för varje tråd i målprocessen.
dotnet-stack ps Visar en lista över de dotnet-processer som stackspårningar kan samlas in från.
dotnet-stack symboliskt Hämta radnumret från metodtoken och IL-förskjutningen i en stacktrace.

dotnet-stack-rapport

Skriver ut stackspårningen för varje tråd i målprocessen.

Sammanfattning

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

Alternativ

  • -n, --name <name>

    Namnet på den process som stacken ska rapporteras från.

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

    Process-ID:t som stacken ska rapporteras från.

dotnet-stack ps

Visar en lista över de dotnet-processer som stackspårningar kan samlas in från. dotnet-stack Version 6.0.320703 och senare versioner visar även de kommandoradsargument som varje process startades med, om den är tillgänglig.

Sammanfattning

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

Exempel

Anta att du startar en tidskrävande app med kommandot dotnet run --configuration Release. I ett annat fönster kör dotnet-stack ps du kommandot . Utdata visas på följande sätt. Eventuella kommandoradsargument visas i dotnet-stack version 6.0.320703 och senare.

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

dotnet-stack symboliskt

Hämta radnumret från metodtoken och IL-förskjutningen i en stacktrace.

Sammanfattning

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

Alternativ

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

    Sökväg för flera kataloger med sammansättning och pdb.

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

    Utdata direkt till en fil.

  • -c, --stdout

    Utdata direkt till en konsol.

Exempel

> 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

Rapportera hanterade staplar med dotnet-stack

Så här rapporterar du hanterade staplar med :dotnet-stack

  • Hämta processidentifieraren (PID) för .NET Core-programmet att rapportera stackar från.

    • I Windows kan du till exempel använda Aktivitetshanteraren eller tasklist kommandot.
    • I Linux, till exempel ps kommandot.
    • dotnet-stack ps
  • Kör följande kommando:

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

    Föregående kommando genererar utdata som liknar följande:

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

    Utdata dotnet-stack från följer följande formulär:

    • Kommentarer i utdata prefixet med #.
    • Varje tråd har en rubrik som innehåller det interna tråd-ID:t: Thread (<thread-id>):.
    • Stackramar följer formuläret Module!Method.
    • Övergångar till ohanterad kod representeras som [Native Frames] i utdata.
    # comment
    Thread (0x1234):
      module!Method
      module!Method
    
    Thread (0x5678):
      [Native Frames]
      Module!Method
      Module!Method
    

Kommentar

Det kan ta lång tid att stoppa processen (upp till flera minuter) för mycket stora program. Körningen måste skicka över typ- och metodinformationen för all hanterad kod som har samlats in för att matcha funktionsnamn.

Nästa steg