Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł dotyczy: ✔️ dotnet-debug wersja 0.0.710501 lub nowsza
Uwaga / Notatka
dotnet-debug obecnie obsługuje tylko aplikacje oparte na technologii CoreCLR i nie są obecnie obsługiwane w systemie macOS.
Install
Aby zainstalować najnowszą wersję dotnet-debugpakietu NuGet, użyj polecenia dotnet tool install :
dotnet tool install --global dotnet-debug
Streszczenie
dotnet-debug [-h|--help] [--version] <command>
Description
Narzędzie dotnet-debug globalne umożliwia dołączanie do dynamicznych procesów platformy .NET i interaktywne analizowanie plików zrzutu. W przeciwieństwie do dotnet-dumpmetody , która koncentruje się na zbieraniu zrzutów i analizie offline, dotnet-debug jest przeznaczona do inspekcji procesów na żywo. Obsługuje wszystkie te same polecenia debugowania SOS co dotnet-dump.
To narzędzie jest przydatne na platformach, takich jak Alpine Linux, gdzie w pełni działające lldb nie jest dostępne. Narzędzie dotnet-debug uruchamia polecenia SOS do analizowania stanu zarządzanego i diagnostyki sterty, ale nie jest natywnym debugerem, więc wyświetlanie natywnych ramek stosu nie jest obsługiwane.
Opcje
--versionWyświetla wersję narzędzia dotnet-debug.
-h|--helpPokazuje pomoc wiersza polecenia.
Commands
| Command |
|---|
| dotnet-debug attach |
| dotnet-debug open-dump |
dotnet-debug attach
Dołącza do procesu na żywo i uruchamia interaktywną powłokę z poleceniami debugowania, aby go eksplorować.
Streszczenie
dotnet-debug attach <process-id> [-c|--commands <debug_command>] [--accept-license-agreement]
Arguments
<process-id>Identyfikator procesu do dołączania i analizowania.
Opcje
-c|--commands <debug_command>Uruchamia polecenia podczas uruchamiania. W wywołaniu można użyć wielu wystąpień tego parametru do łączenia poleceń. Polecenia są uruchamiane w kolejności, w której są udostępniane w wierszu polecenia. Jeśli chcesz
dotnet-debugzakończyć działanie po poleceniach, ostatnie polecenie powinno mieć wartośćexit.--accept-license-agreementAkceptuje umowę licencyjną bez monitowania.
Example
Dołącz do uruchomionego procesu o identyfikatorze 1234:
$ dotnet-debug attach 1234
Attaching to process: 1234 ...
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>
Uruchom polecenie przy dołączaniu, a następnie zamknij:
dotnet-debug attach 1234 -c clrstack -c exit
dotnet-debug open-dump
Uruchamia interaktywną powłokę z poleceniami debugowania w celu eksplorowania pliku zrzutu.
Streszczenie
dotnet-debug open-dump <dump_path> [-c|--commands] [--accept-license-agreement]
Arguments
<dump_path>Ścieżka do pliku zrzutu do analizy.
Opcje
-c|--commands <debug_command>Uruchamia polecenia podczas uruchamiania. W wywołaniu można użyć wielu wystąpień tego parametru do łączenia poleceń. Polecenia są uruchamiane w kolejności, w której są udostępniane w wierszu polecenia. Jeśli chcesz
dotnet-debugzakończyć działanie po poleceniach, ostatnie polecenie powinno mieć wartośćexit.--accept-license-agreementAkceptuje umowę licencyjną bez monitowania.
Example
Otwórz i przeanalizuj plik zrzutu:
$ dotnet-debug open-dump ./core_20260209_135837
Loading dump: ./core_20260209_135837 ...
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>
Debugowanie poleceń SOS
attach Polecenia i open-dump wyświetlają interaktywną sesję, która akceptuje następujące polecenia SOS.
| Command | Funkcja |
|---|---|
analyzeoom |
Przedstawia informacje o ostatnim obiekcie OOM, które wystąpiły w żądaniu alokacji do sterty GC. |
clrmodules |
Wyświetla listę zarządzanych modułów w procesie. |
clrstack |
Dostarcza ślad stosu wyłącznie dla kodu zarządzanego. |
clrthreads |
Wyświetla listę zarządzanych wątków, które są uruchomione. |
clru |
Wyświetla adnotację dezasemblacji metody zarządzanej. |
d lub readmemory |
Zrzuty zawartości pamięci. |
dbgout |
Włącza/wyłącza (-off) wewnętrzne rejestrowanie SOS. |
dso |
Wyświetla wszystkie zarządzane obiekty znalezione w granicach bieżącego stosu. |
dumpalc |
Wyświetla szczegółowe informacje o zbieralnym obiekcie AssemblyLoadContext, do którego załadowano określony obiekt. |
dumparray |
Wyświetla szczegółowe informacje o tablicy zarządzanej. |
dumpasync |
Wyświetla informacje o maszynach stanu asynchronicznego na stercie zbieranym przez śmieci. |
dumpassembly |
Wyświetla szczegółowe informacje o zestawie. |
dumpclass |
Wyświetla informacje o EEClass strukturze pod określonym adresem. |
dumpconcurrentdictionary |
Wyświetla współbieżną zawartość słownika. |
dumpconcurrentqueue |
Wyświetla współbieżną zawartość kolejki. |
dumpdelegate |
Wyświetla informacje o pełnomocniku. |
dumpdomain |
Wyświetla informacje o wszystkich zestawach we wszystkich domenach aplikacji lub określonym. |
dumpgcdata |
Wyświetla informacje o danych GC. |
dumpgen |
Wyświetla zawartość stert dla określonej generacji. |
dumpheap |
Wyświetla informacje o stosie zbieranym przez śmieci i statystykach zbierania danych dotyczących obiektów. |
dumpil |
Wyświetla wspólny język pośredni (CIL) skojarzony z metodą zarządzaną. |
dumplog |
Zapisuje zawartość dziennika obciążenia pamięci do określonego pliku. |
dumpmd |
Wyświetla informacje o MethodDesc strukturze pod określonym adresem. |
dumpmodule |
Wyświetla informacje o module pod określonym adresem. |
dumpmt |
Wyświetla informacje o tabeli metod pod określonym adresem. |
dumpobj |
Wyświetla informacje o obiekcie pod określonym adresem. |
dumpruntimetypes |
Znajduje wszystkie obiekty System.RuntimeType na stercie GC i wyświetla nazwę typu i metodę MethodTable, do których się odwołują. |
dumpsig |
Zrzuty sygnatury metody lub pola określonego przez <sigaddr> <moduleaddr>. |
dumpsigelem |
Zrzuty pojedynczego elementu obiektu podpisu. |
dumpstackobjects |
Wyświetla wszystkie zarządzane obiekty znalezione w granicach bieżącego stosu. |
dumpvc |
Wyświetla informacje o polach klasy wartości. |
eeheap |
Wyświetla informacje o pamięci procesów używanej przez wewnętrzne struktury danych środowiska uruchomieniowego. |
eestack |
Uruchamia wszystkie dumpstack wątki w procesie. |
eeversion |
Wyświetla informacje o wersjach środowiska uruchomieniowego i SOS. |
ehinfo |
Wyświetla bloki obsługi wyjątków w metodzie JIT-ed. |
exit lub quit |
Zamyka tryb interaktywny. |
finalizequeue |
Wyświetla wszystkie obiekty zarejestrowane dla finalizacji. |
findappdomain |
Próbuje rozpoznać domenę AppDomain obiektu GC. |
gchandles |
Wyświetla statystyki dotyczące uchwytów modułu odśmiecania pamięci w procesie. |
gcheapstat |
Wyświetla statystyki dotyczące modułu odśmiecającego śmieci. |
gcinfo |
Wyświetla kodowanie GC JIT dla metody . |
gcroot |
Wyświetla informacje o odwołaniach (lub korzeniach) do obiektu pod określonym adresem. |
gcwhere |
Wyświetla lokalizację na stercie GC określonego adresu. |
histclear |
Zwalnia wszelkie zasoby używane przez rodzinę poleceń Hist. |
histinit |
Inicjuje struktury SOS z dziennika obciążenia zapisanego w obiekcie debugowanym. |
histobj |
Sprawdza wszystkie rekordy relokacji dziennika stresu i wyświetla łańcuch relokacji odzyskiwania pamięci, które mogły prowadzić do adresu przekazanego jako argument. |
histobjfind |
Wyświetla wszystkie wpisy dziennika odwołujące się do obiektu pod określonym adresem. |
histroot |
Wyświetla informacje powiązane zarówno z promocjami, jak i przeniesieniami określonego korzenia. |
histstats |
Wyświetla statystyki dziennika obciążenia. |
ip2md |
MethodDesc Wyświetla strukturę na określonym adresie w kodzie, który został skompilowany w trybie JIT. |
listnearobj |
Wyświetla obiekt poprzedzający i udany określony adres. |
logopen |
Włącza rejestrowanie plików konsoli. |
logclose |
Wyłącza rejestrowanie plików konsoli. |
logging |
Włącza/wyłącza wewnętrzne rejestrowanie SOS. |
lm lub modules |
Wyświetla moduły natywne w procesie. |
name2ee |
MethodTable Wyświetla struktury i EEClass dla określonego typu lub metody w określonym module. |
objsize |
Wyświetla rozmiar określonego obiektu. |
parallelstacks |
Wyświetla scalony stos wątków podobnie jak w panelu "Równoległe stosy" programu Visual Studio. |
pathto |
Wyświetla ścieżkę GC z <root> do <target>. |
pe lub printexception |
Wyświetla i formatuje pola dowolnego obiektu pochodzącego z Exception klasy pod określonym adresem. |
r lub registers |
Wyświetla rejestry wątku. |
runtimes |
Wyświetla listę środowisk uruchomieniowych w obiekcie docelowym lub zmienia domyślne środowisko uruchomieniowe. |
setclrpath |
Ustawia ścieżkę do ładowania plików coreclr dac/dbi przy użyciu polecenia setclrpath <path>. |
setsymbolserver |
Włącza obsługę serwera symboli. |
sos |
Wykonuje różne polecenia debugowania coreclr. Użyj składni sos <command-name> <args>. Aby uzyskać więcej informacji, użyj polecenia soshelp. |
soshelp lub help |
Wyświetla wszystkie dostępne polecenia. |
soshelp <command> lub help <command> |
Wyświetla określone polecenie. |
syncblk |
Wyświetla informacje o posiadaczu elementu SyncBlock. |
taskstate |
Wyświetla stan zadania w formacie czytelnym dla człowieka. |
threadpool |
Wyświetla informacje o puli wątków środowiska uruchomieniowego. |
threadpoolqueue |
Wyświetla elementy robocze puli wątków w kolejce. |
threadstate |
Dość drukuje znaczenie stanu wątków. |
threads <threadid> lub setthread <threadid> |
Ustawia lub wyświetla bieżący identyfikator wątku dla poleceń SOS. |
timerinfo |
Wyświetla informacje o uruchomionych czasomierzach. |
token2ee |
Przedstawia strukturę MethodTable i strukturę MethodDesc dla określonego tokenu i modułu. |
traverseheap |
Zapisuje informacje stertowe do pliku w formacie zrozumiałym dla CLR Profiler. |
verifyheap |
Sprawdza stertę GC pod kątem oznak uszkodzenia. |
verifyobj |
Sprawdza, czy obiekt, który jest przekazywany jako argument posiada oznaki uszkodzenia. |
Uwaga / Notatka
Aby uzyskać więcej informacji, zobacz Rozszerzenie debugowania SOS dla platformy .NET.
Użyj dotnet-debug polecenia , aby dołączyć do procesu na żywo
W poniższym przykładzie pokazano, jak dołączyć do uruchomionego procesu platformy .NET i zbadać problem z pulą wątków:
$ dotnet-debug attach 1902
Attaching to process: 1902 ...
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>
Ta akcja powoduje wyświetlenie interaktywnej sesji, która akceptuje polecenia, takie jak:
> clrstack
OS Thread Id: 0x573d (0)
Child SP IP Call Site
00007FFD28B42C58 00007fb22c1a8ed9 [HelperMethodFrame_PROTECTOBJ: 00007ffd28b42c58] System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean, Boolean)
00007FFD28B42DD0 00007FB1B1334F67 System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.Program.Foo4(System.String)
00007FFD28B42ED0 00007FB1B18D2FC4 SymbolTestApp.Program.Foo2(Int32, System.String)
00007FFD28B42F00 00007FB1B18D2F5A SymbolTestApp.Program.Foo1(Int32, System.String)
00007FFD28B42F30 00007FB1B18D168E SymbolTestApp.Program.Main(System.String[])
Aby wyświetlić nieobsługiwany wyjątek:
> pe -lines
Exception object: 00007fb18c038590
Exception type: System.Reflection.TargetInvocationException
Message: Exception has been thrown by the target of an invocation.
InnerException: System.Exception, Use !PrintException 00007FB18C038368 to see more.
StackTrace (generated):
SP IP Function
00007FFD28B42DD0 0000000000000000 System.Private.CoreLib.dll!System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean, Boolean)
00007FFD28B42DD0 00007FB1B1334F67 System.Private.CoreLib.dll!System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)+0xa7
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.dll!SymbolTestApp.Program.Foo4(System.String)+0x15d
StackTraceString: <none>
HResult: 80131604
Klasa dotnet-debug a klasa dotnet-dump
dotnet-debug i dotnet-dump współużytkują te same polecenia debugowania SOS, ale służą różnym celom podstawowym:
| Funkcja | dotnet-debug |
dotnet-dump |
|---|---|---|
| Dołączanie do procesu na żywo | ✔️ | ❌ |
| Zbieranie zrzutów | ❌ | ✔️ |
| Analizowanie plików zrzutu | ✔️ | ✔️ |
Wyświetlanie listy procesów platformy .NET (ps) |
❌ | ✔️ |
Użyj dotnet-debug polecenia , aby debugować proces na żywo interaktywnie. Użyj dotnet-dump polecenia , gdy musisz zebrać zrzuty lub przeanalizować je w trybie offline.