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
:
dotnet global tool:
Om du vill installera den senaste versionen av
dotnet-stack
NuGet-paketet använder du installationskommandot för dotnet-verktyget:dotnet tool install --global dotnet-stack
Direkt nedladdning:
Ladda ned det körbara verktyget som matchar din plattform:
OS Plattform Windows x86 | x64 | Arm | Arm-x64 Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
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
- I Windows kan du till exempel använda Aktivitetshanteraren eller
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
- Kommentarer i utdata prefixet med
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.