Inspekcja zarządzanych śladów stosu (dotnet-stack)
Ten artykuł dotyczy: ✔️ dotnet-stack
wersja 5.0.221401 lub nowsza
Instalowanie
Istnieją dwa sposoby pobierania i instalowania dotnet-stack
programu :
dotnet global tool:
Aby zainstalować najnowszą wersję
dotnet-stack
pakietu NuGet, użyj polecenia dotnet tool install :dotnet tool install --global dotnet-stack
Pobieranie bezpośrednie:
Pobierz plik wykonywalny narzędzia pasujący do platformy:
System operacyjny Platforma Windows x86 | x64 | Arm | Arm-x64 Linux x64 Arm | Arm64 | | musl-x64 musl-Arm64 |
Streszczenie
dotnet-stack [-h, --help] [--version] <command>
opis
Narzędzie dotnet-stack
:
- To międzyplatformowe narzędzie .NET Core.
- Przechwytuje i drukuje zarządzane stosy dla wszystkich wątków w docelowym procesie platformy .NET.
- Wykorzystuje śledzenie udostępniane przez środowisko uruchomieniowe platformy
EventPipe
.NET Core.
Opcje
-h|--help
Pokazuje pomoc wiersza polecenia.
--version
Wyświetla wersję narzędzia dotnet-stack.
Polecenia
Polecenie | opis |
---|---|
dotnet-stack report | Drukuje ślad stosu dla każdego wątku w procesie docelowym. |
dotnet-stack ps | Wyświetla listę procesów dotnet, z których można zbierać ślady stosu. |
dotnet-stack symboliczny | Pobierz numer wiersza z tokenu metody i przesunięcia IL w stostrace. |
dotnet-stack report
Drukuje ślad stosu dla każdego wątku w procesie docelowym.
Streszczenie
dotnet-stack report -p|--process-id <pid>
-n|--name <process-name>
[-h|--help]
Opcje
-n, --name <name>
Nazwa procesu raportowania stosu.
-p|--process-id <PID>
Identyfikator procesu do raportowania stosu z.
dotnet-stack ps
Wyświetla listę procesów dotnet, z których można zbierać ślady stosu.
dotnet-stack
W wersji 6.0.320703 i nowszych wersjach są również wyświetlane argumenty wiersza polecenia, z którymi uruchomiono każdy proces, jeśli jest dostępny.
Streszczenie
dotnet-stack ps [-h|--help]
Przykład
Załóżmy, że uruchamiasz długotrwałą aplikację przy użyciu polecenia dotnet run --configuration Release
. W innym oknie uruchomisz dotnet-stack ps
polecenie . Dane wyjściowe, które zobaczysz, są następujące. Argumenty wiersza polecenia, jeśli istnieją, są wyświetlane w dotnet-stack
wersji 6.0.320703 lub nowszej.
> dotnet-stack ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
dotnet-stack symboliczny
Pobierz numer wiersza z tokenu metody i przesunięcia IL w stostrace.
Streszczenie
dotnet-stack symbolicate <input-path> [-d|--search-dir] [-o|--output] [-c|--stdout] [-h|--help]
Opcje
-d, --search-dir <directory1 directory2 ...>
Ścieżka wielu katalogów z zestawem i plikiem pdb.
-o, --output <output-path>
Dane wyjściowe bezpośrednio do pliku.
-c, --stdout
Dane wyjściowe bezpośrednio do konsoli.
Przykład
> 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
Zarządzane stosy raportów z dotnet-stack
Aby zgłosić zarządzane stosy przy użyciu polecenia dotnet-stack
:
Pobierz identyfikator procesu (PID) aplikacji .NET Core do raportowania stosów.
- W systemie Windows można użyć Menedżera zadań lub
tasklist
polecenia, na przykład. - Na przykład
ps
w systemie Linux polecenie . - dotnet-stack ps
- W systemie Windows można użyć Menedżera zadań lub
Uruchom następujące polecenie:
dotnet-stack report --process-id <PID>
Poprzednie polecenie generuje dane wyjściowe podobne do następujących:
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[])
Dane wyjściowe następującego
dotnet-stack
formularza:- Komentarze w danych wyjściowych są poprzedzone prefiksem
#
. - Każdy wątek ma nagłówek zawierający identyfikator wątku natywnego:
Thread (<thread-id>):
. - Ramki stosu są zgodne z formularzem
Module!Method
. - Przejścia do niezarządzanych kodów są reprezentowane jako
[Native Frames]
w danych wyjściowych.
# comment Thread (0x1234): module!Method module!Method Thread (0x5678): [Native Frames] Module!Method Module!Method
- Komentarze w danych wyjściowych są poprzedzone prefiksem
Uwaga
Zatrzymanie procesu może potrwać długo (do kilku minut) w przypadku bardzo dużych aplikacji. Środowisko uruchomieniowe musi wysyłać informacje o typie i metodzie dla całego kodu zarządzanego przechwyconego w celu rozpoznawania nazw funkcji.