Rozszerzenia debugera platformy .NET
Rozszerzenia debugera platformy .NET umożliwiają wyświetlanie informacji o kodzie uruchomionym w środowisku uruchomieniowym platformy .NET, zarówno w procesach na żywo, jak i zrzutach. Rozszerzenia są wstępnie instalowane z Windbgi można je pobrać do użycia z usługą LLDB. Za pomocą rozszerzeń debugera platformy .NET można wykonywać następujące czynności:
- Zbierz informacje o zarządzanym stercie.
- Poszukaj uszkodzeń stert.
- Wyświetlanie wewnętrznych typów danych używanych przez środowisko uruchomieniowe.
- Wyświetl informacje o wszystkim kodzie zarządzanym uruchomionym wewnątrz środowiska uruchomieniowego.
Rozszerzenia debugera platformy .NET obejmują polecenia z istniejącego narzędzia dotnet-sos, a także nowe polecenia. Ograniczony zestaw poleceń jest również obsługiwany dla natywnego środowiska uruchomieniowego usługi AOT.
Składnia
Pod wiatrem: ![command] [options]
W obszarze LLDB: sos [command] [options]
Wiele poleceń ma aliasy lub skróty w obszarze LLDB: clrstack [options]
Polecenia
Poniższa tabela poleceń jest również dostępna w Pomoc lub soshelp. Indywidualna pomoc dotycząca poleceń jest dostępna przy użyciu soshelp <command>
.
Polecenie | Opis |
---|---|
bpmd [-nofuturemodule] [<nazwa modułu><nazwa metody>] [-md<MethodDesc >] -list-clear<oczekujący numer punktu przerwania>-clearall |
Tworzy punkt przerwania w określonej metodzie w określonym module. Jeśli określony moduł i metoda nie zostały załadowane, to polecenie czeka na powiadomienie, że moduł został załadowany i skompilowany just in time (JIT) przed utworzeniem punktu przerwania. Listę oczekujących punktów przerwania można zarządzać przy użyciu opcji -list, -cleari -clearall opcje: Opcja -list generuje listę wszystkich oczekujących punktów przerwania. Jeśli oczekujący punkt przerwania ma identyfikator modułu niezerowego, ten punkt przerwania jest specyficzny dla funkcji w tym konkretnym załadowanym module. Jeśli oczekujący punkt przerwania ma identyfikator modułu zero, ten punkt przerwania ma zastosowanie do modułów, które nie zostały jeszcze załadowane. Użyj opcji -clear lub -clearall, aby usunąć oczekujące punkty przerwania z listy. |
CLRStack [-a] [-l] [-p] [-n] [-f] [-r] [-all] | Udostępnia ślad stosu tylko kodu zarządzanego. Opcja -p pokazuje argumenty funkcji zarządzanej. Opcja -l zawiera informacje o zmiennych lokalnych w ramce. Rozszerzenia debugera platformy .NET nie mogą pobierać nazw lokalnych, więc dane wyjściowe nazw lokalnych są w formacie <adres lokalny>=<wartości>. Opcja -a to skrót do -l i -p połączone. Opcja -n wyłącza wyświetlanie nazw plików źródłowych i numerów wierszy. Jeśli debuger ma wybraną opcję SYMOPT_LOAD_LINES, SOS wyszukuje symbole dla każdej zarządzanej ramki i jeśli zakończy się pomyślnie, wyświetla odpowiednią nazwę pliku źródłowego i numer wiersza. Można określić parametr -n (bez numerów wierszy), aby wyłączyć to zachowanie. Opcja -f (tryb pełny) wyświetla natywne ramki przeplatające je ramkami zarządzanymi oraz przesunięciem nazwy zestawu i funkcji dla ramek zarządzanych. Ta opcja nie wyświetla ramek natywnych w przypadku użycia z dotnet-dump .Opcja -r zrzuty rejestrów dla każdej ramki stosu. Opcja — wszystkie zrzuty stosów wszystkich zarządzanych wątków. |
COMState | Wyświetla model apartamentu COM dla każdego wątku i wskaźnika Context , jeśli jest dostępny. To polecenie jest obsługiwane tylko w systemie Windows. |
DumpArray [-start<startIndex>] [-length<długości>] [-details] [-nofields] <adres obiektu tablicy> -lub- |
Sprawdza elementy obiektu tablicy. Opcja -start określa indeks początkowy, w którym mają być wyświetlane elementy. Opcja -length określa liczbę elementów do pokazania. Opcja Opcja -nofields uniemożliwia wyświetlanie tablic. Ta opcja jest dostępna tylko wtedy, gdy określono opcję -details. |
dumpAsync (dumpasync) [-mt<MethodTable address>] [-type<nazwa typu częściowego>] [-oczekiwanie] [-roots] | DumpAsync przechodzi stertę zbieraną przez śmieci i wyszukuje obiekty reprezentujące maszyny stanu asynchronicznego utworzone podczas przenoszenia stanu metody asynchronicznej do sterta. To polecenie rozpoznaje maszyny stanu asynchronicznego zdefiniowane jako async void , async Task , async Task<T> , async ValueTask i async ValueTask<T> .Dane wyjściowe zawierają blok szczegółów dla każdego znalezionego obiektu maszyny stanu asynchronicznego. Te szczegóły obejmują: - Wiersz typu obiektu maszyny stanu asynchronicznego, w tym jego adres MethodTable, adres obiektu, jego rozmiar i jego nazwa typu. - Wiersz nazwy typu maszyny stanu, który znajduje się w obiekcie. — Lista każdego pola na maszynie stanu. - Wiersz kontynuacji z tego obiektu maszyny stanu, jeśli co najmniej jeden został zarejestrowany. — Odnaleziono korzenie GC dla tego obiektu maszyny stanu asynchronicznego. Obsługiwane w przypadku natywnych aplikacji AOT. |
adres zestawu<dumpAssembly> | Wyświetla informacje o zestawie. Polecenie DumpAssembly wyświetla listę wielu modułów, jeśli istnieją. Adres zestawu można uzyskać przy użyciu polecenia DumpDomain. |
Wyświetla informacje o strukturze EEClass skojarzonej z typem.Polecenie DumpClass wyświetla wartości pól statycznych, ale nie wyświetla wartości pól niestatycznych. Aby uzyskać adres struktury |
|
dumpDomain [<adres domeny>] | Wylicza każdy obiekt Assembly załadowany w określonym adresie obiektu AppDomain. Po wywołaniu bez parametrów polecenie DumpDomain wyświetla wszystkie obiekty AppDomain w procesie. Ponieważ platforma .NET (Core) ma tylko jeden AppDomain, dumpDomain zwraca tylko jeden obiekt. |
dumpHeap [-stat] [-strings] [-short] [-min<rozmiar>] [-max<size>] [-thinlock] [-startAtLowerBound] [-mt<MethodTable address>] [-type -type<nazwa typu częściowego>] [rozpoczęcie [koniec]] | Wyświetla informacje o stosie zbieranym przez śmieci i statystyki zbierania danych o obiektach. Polecenie DumpHeap wyświetla ostrzeżenie, jeśli wykryje nadmierne fragmentację w stercie modułu odśmiecania pamięci. Opcja -stat ogranicza dane wyjściowe do podsumowania typu statystycznego. Opcja -strings ogranicza dane wyjściowe do podsumowania wartości ciągu statystycznego. Opcja -short ogranicza dane wyjściowe tylko do adresu każdego obiektu. To polecenie umożliwia łatwe przesyłanie potoku danych wyjściowych z polecenia do innego polecenia debugera na potrzeby automatyzacji. Opcja -min ignoruje obiekty, które są mniejsze niż parametr size określony w bajtach.Opcja -max ignoruje obiekty większe niż parametr size określony w bajtach.Opcja -thinlock raportuje ThinLocks. Aby uzyskać więcej informacji, zobacz polecenie Opcja -startAtLowerBound wymusza przejście sterta, aby rozpocząć od dolnej granicy podanego zakresu adresów. W fazie planowania sterta jest często niemożliwa do chodzenia, ponieważ obiekty są przenoszone. Ta opcja wymusza DumpHeap, aby rozpocząć jego pracę w określonej dolnej granicy. Musisz podać adres prawidłowego obiektu jako dolną granicę, aby ta opcja działała. Pamięć można wyświetlić pod adresem nieprawidłowego obiektu, aby ręcznie znaleźć następną tabelę metod. Jeśli odzyskiwanie pamięci jest obecnie w wywołaniu memcopy , może być również możliwe znalezienie adresu następnego obiektu przez dodanie rozmiaru do adresu początkowego, który jest dostarczany jako parametr.Opcja -mt zawiera tylko te obiekty, które odpowiadają określonej strukturze MethodTable .Opcja -typem zawiera tylko te obiekty, których nazwa typu jest dopasowaniem podciągów określonego ciągu. Parametr start rozpoczyna się od określonego adresu.Parametr end zatrzymuje wyświetlanie listy pod określonym adresem.Obsługiwane w przypadku natywnych aplikacji AOT. |
Wyświetla wspólny język pośredni (CIL) skojarzony z metodą zarządzaną. Dynamiczne CIL jest emitowane inaczej niż CIL ładowane z zestawu. Dynamiczne CIL odwołuje się do obiektów w tablicy obiektów zarządzanych, a nie do tokenów metadanych. |
|
DumpLock [--allthreads] [--waits] | Wyświetla informacje o obiektach System.Threading.Lock, takich jak te przechowywane przez wątki (domyślnie) lub te, na które są czekane wątki. |
dumpLog [-addr<addressOfStressLog>] [<Nazwa pliku>] | Zapisuje zawartość dziennika obciążenia w pamięci do określonego pliku. Jeśli nie określisz nazwy, to polecenie tworzy plik o nazwie StressLog.txt w bieżącym katalogu. Dziennik obciążenia w pamięci pomaga zdiagnozować awarie stresu bez używania blokad lub we/wy. Aby włączyć dziennik stresu, ustaw następujące klucze rejestru w obszarze HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework: (DWORD) StressLog = 1 (DWORD) LogFacility = 0xffffffff (DWORD) StressLogSize = 65536 Opcjonalna opcja -addr umożliwia określenie dziennika przeciążeń innego niż dziennik domyślny.Obsługiwane w przypadku natywnych aplikacji AOT. |
adres DumpMD<MethodDesc> | Wyświetla informacje o strukturze MethodDesc pod określonym adresem.Aby uzyskać adres struktury MethodDesc z funkcji zarządzanej, można użyć polecenia IP2MD. |
dumpMT [-MD] adres <MethodTable> | Wyświetla informacje o tabeli metod pod określonym adresem. Określenie opcji -MD powoduje wyświetlenie listy wszystkich metod zdefiniowanych za pomocą obiektu . Każdy obiekt zarządzany zawiera wskaźnik tabeli metod. |
DumpModule [-mt] adres modułu <> | Wyświetla informacje o module pod określonym adresem. Opcja -mt wyświetla typy zdefiniowane w module i typy, do których odwołuje się moduł Aby pobrać adres modułu, możesz użyć polecenia DumpDomain lub DumpAssembly. |
DumpObj [-nofields] adres obiektu <> -lub- |
Wyświetla informacje o obiekcie pod określonym adresem. Polecenie DumpObj wyświetla pola, informacje o strukturze EEClass , tabelę metod i rozmiar obiektu.Aby pobrać adres obiektu, można użyć polecenia DumpStackObjects. Możesz uruchomić polecenie DumpObj na polach typu CLASS , ponieważ są również obiektami.Opcja - pól uniemożliwia wyświetlanie pól obiektu. Jest to przydatne w przypadku obiektów takich jak Ciąg. |
|
Wyświetla obiekty typu środowiska uruchomieniowego w stercie modułu odśmieceń pamięci i wyświetla ich skojarzone nazwy typów i tabele metod. |
DumpStack [-EE] [-n] [top stack [bottom stack]] |
Wyświetla ślad stosu. Opcja -EE powoduje, że polecenie DumpStack wyświetlać tylko funkcje zarządzane. Użyj parametrów top i bottom , aby ograniczyć ramki stosu wyświetlane na platformach x86.Opcja -n wyłącza wyświetlanie nazw plików źródłowych i numerów wierszy. Jeśli debuger ma wybraną opcję SYMOPT_LOAD_LINES, SOS wyszuka symbole dla każdej zarządzanej ramki i jeśli zostanie pomyślnie wyświetlona odpowiednia nazwa pliku źródłowego i numer wiersza. Można określić parametr -n (bez numerów wierszy), aby wyłączyć to zachowanie. |
DumpSig<sigaddr><moduleaddr> | Wyświetla informacje o strukturze Sig pod określonym adresem. |
DumpSigElem<sigaddr><moduleaddr> | Wyświetla pojedynczy element obiektu podpisu. W większości przypadków należy użyć DumpSig, aby przyjrzeć się poszczególnym obiektom podpisu. Jeśli jednak podpis został uszkodzony w jakiś sposób, możesz użyć DumpSigElem, aby odczytać prawidłowe części. |
DumpStackObjects [-verify] [top stack [bottom stack]]-lub- DSO [-verify] [ top stack [bottom stack]] |
Wyświetla wszystkie obiekty zarządzane znalezione w granicach bieżącego stosu. Opcja -verify weryfikuje każde niestatyczne pole CLASS pola obiektu.Użyj polecenia DumpStackObject z poleceniami śledzenia stosu, takimi jak K (windbg) lub bt (lldb) wraz z clrstack polecenia, aby określić wartości zmiennych lokalnych i parametrów. |
adres DumpVC<MethodTable adres><adres> | Wyświetla informacje o polach klasy wartości pod określonym adresem. Parametr MethodTable umożliwia polecenie DumpVC poprawne interpretowanie pól. Klasy wartości nie mają tabeli metod jako pierwszego pola. |
EEHeap [-gc] [-loader] | Przedstawia informacje o pamięci procesu używanej przez wewnętrzne struktury danych środowiska uruchomieniowego. Opcje -gc i -loader ograniczają dane wyjściowe tego polecenia do modułu odśmiecania pamięci lub struktur danych modułu ładującego. Informacje dotyczące modułu odśmiecenia pamięci zawierają listę zakresów poszczególnych segmentów w zarządzanym stercie. Jeśli wskaźnik mieści się w zakresie segmentów podanym przez -gc, wskaźnik jest wskaźnikiem obiektu. |
EEStack [-short] [-EE] | Uruchamia polecenie DumpStack we wszystkich wątkach w procesie. Opcja Wątki, które miały blokadę. Wątki, które zostały zatrzymane, aby umożliwić odzyskiwanie pamięci. Wątki, które są obecnie w kodzie zarządzanym. |
EHInfo [<MethodDesc address>] [<Code address>] | Wyświetla bloki obsługi wyjątków w określonej metodzie. To polecenie wyświetla adresy kodu i przesunięcia bloku klauzuli (blok try ) i blok programu obsługi (blok catch ). |
— często zadawane pytania | Wyświetla często zadawane pytania. Nieobsługiwane w dotnet-dump . |
FinalizeQueue [-detail] | [-allReady] [-short] | Przedstawia wszystkie obiekty zarejestrowane do finalizacji. Opcja -detail wyświetla dodatkowe informacje o wszelkich SyncBlocks , które należy wyczyścić, oraz wszelkie RuntimeCallableWrappers (RCW), które oczekują na oczyszczanie. Obie te struktury danych są buforowane i czyszczone przez wątek finalizatora po uruchomieniu.Opcja -allReady wyświetla wszystkie obiekty, które są gotowe do finalizacji, niezależnie od tego, czy są one już oznaczone przez odzyskiwanie pamięci jako takie, czy zostaną oznaczone przez następne odzyskiwanie pamięci. Obiekty znajdujące się na liście "gotowe do finalizacji" są obiektami finalizowalnymi, które nie są już zakorzenione. Ta opcja może być kosztowna, ponieważ sprawdza, czy wszystkie obiekty w kolejkach, które można sfinalizować, są nadal zakorzenione.Opcja -short ogranicza dane wyjściowe do adresu każdego obiektu. Jeśli jest on używany z -allReady, wylicza wszystkie obiekty, które mają finalizator, który nie jest już rooted. Jeśli jest on używany niezależnie, wyświetla listę wszystkich obiektów w kolejkach możliwych do sfinalizowania i "gotowych do finalizacji". |
adres obiektu<FindAppDomain> | Określa domenę aplikacji obiektu pod określonym adresem. |
Powoduje przerwanie debugera w debugerze w następnej kolekcji określonej generacji. Efekt jest resetowany natychmiast po wystąpieniu przerwy. Aby przerwać kolejną kolekcję, musisz ponownie uruchomić polecenie. Adres obiektu <> formularza tego polecenia jest używany po przerwie spowodowanej przez -gen lub -gen dowolnego. W tym czasie debuggee jest w odpowiednim stanie dla FindRoots do identyfikowania korzeni obiektów z obecnych potępionych pokoleń. Obsługiwane tylko w systemie Windows. | |
GCHandles [-perdomain] | Wyświetla statystyki dotyczące uchwytów modułu odśmieceń pamięci w procesie. Opcja -perdomain rozmieszcza statystyki według domeny aplikacji. Użyj polecenia GCHandles, aby znaleźć przecieki pamięci spowodowane wyciekami pamięci przez moduł odśmiecenia pamięci. Na przykład wyciek pamięci występuje, gdy kod zachowuje dużą tablicę, ponieważ silny uchwyt modułu odśmiecania pamięci nadal wskazuje go, a uchwyt jest odrzucany bez zwalniania. Obsługiwane tylko w systemie Windows. |
GCHandleLeaks | Wyszukuje w pamięci wszystkie odwołania do silnych i przypiętych uchwytów modułu odśmiecania pamięci w procesie i wyświetla wyniki. Jeśli zostanie znaleziona dojście, polecenie GCHandleLeaks wyświetla adres odwołania. Jeśli uchwyt nie zostanie znaleziony w pamięci, to polecenie wyświetli powiadomienie. Obsługiwane tylko w systemie Windows. |
adres GCInfo<MethodDesc><Adres kodu> | Wyświetla dane wskazujące, kiedy rejestry lub lokalizacje stosu zawierają obiekty zarządzane. W przypadku odzyskiwania pamięci moduł zbierający musi znać lokalizacje odwołań do obiektów, aby można było je zaktualizować przy użyciu nowych wartości wskaźnika obiektu. |
GCRoot [-nostacks] [-all] adres obiektu <> | Wyświetla informacje o odwołaniach (lub korzeniach) do obiektu pod określonym adresem. Polecenie GCRoot sprawdza całą zarządzaną stertę i tabelę dojścia do obsługi w innych obiektach i uchwytach na stosie. Każdy stos jest następnie wyszukiwany pod kątem wskaźników do obiektów, a kolejka finalizatora jest również przeszukiwana. To polecenie nie określa, czy katalog główny stosu jest prawidłowy, czy jest odrzucany. Użyj clrstack i polecenia U, aby zdezasemblować ramkę, do którego należy wartość lokalna lub argument, aby określić, czy katalog główny stosu jest nadal używany. Opcja -nostacks ogranicza wyszukiwanie do uchwytów modułu odśmiecania pamięci i osiągalnych obiektów. Opcja -all wymusza wyświetlanie wszystkich korzeni zamiast tylko unikatowych korzeni. |
adres obiektu |
Wyświetla lokalizację i rozmiar sterty odzyskiwania pamięci przekazanego argumentu. Gdy argument znajduje się w zarządzanym stercie, ale nie jest prawidłowym adresem obiektu, rozmiar jest wyświetlany jako 0 (zero). |
Pomocy (soshelp) [<>polecenia ] [faq ] |
Wyświetla wszystkie dostępne polecenia, gdy nie określono parametru, lub wyświetla szczegółowe informacje pomocy dotyczące określonego polecenia. Parametr faq wyświetla odpowiedzi na często zadawane pytania. |
HeapStat [-inclUnrooted | -iu] | Przedstawia rozmiary generowania dla każdej sterty i łączną ilość wolnego miejsca w każdej generacji na każdej stercie. Jeśli zostanie określona opcja -inclUnrooted, raport zawiera informacje o zarządzanych obiektach z sterta odzyskiwania pamięci, który nie jest już rooted. Obsługiwane tylko w systemie Windows. |
HistClear | Zwalnia wszystkie zasoby używane przez rodzinę poleceń Hist .Ogólnie rzecz biorąc, nie trzeba jawnie wywoływać HistClear , ponieważ każda HistInit czyści poprzednie zasoby. |
HistInit | Inicjuje struktury SOS z dziennika stresu zapisanego w debuggee. |
HistObj<obj_address> | Sprawdza wszystkie rekordy relokacji dziennika stresu i wyświetla łańcuch relokacji odzyskiwania pamięci, które mogły doprowadzić do adresu przekazanego jako argument. |
HistObjFind<obj_address> | Wyświetla wszystkie wpisy dziennika odwołujące się do obiektu pod określonym adresem. |
Wyświetla informacje dotyczące zarówno promocji, jak i relokacji określonego katalogu głównego. Wartość główna może służyć do śledzenia ruchu obiektu przez odzyskiwanie pamięci. |
|
IP2MD (ip2md) <Adres kodu> | Wyświetla strukturę MethodDesc na określonym adresie w kodzie, który został skompilowany w trybie JIT. |
ListNearObj (lno) <obj_address> | Wyświetla obiekty poprzedzające i następujące po określonym adresie. Polecenie wyszukuje adres w stercie odzyskiwania pamięci, który wygląda jak prawidłowy początek obiektu zarządzanego (na podstawie prawidłowej tabeli metod) i obiektu pod adresem argumentu. Obsługiwane tylko w systemie Windows. |
MinidumpMode [0] [1] | Zapobiega uruchamianiu niebezpiecznych poleceń podczas korzystania z minidump. Przekaż 0, aby wyłączyć tę funkcję lub 1, aby włączyć tę funkcję. Domyślnie wartość MinidumpMode jest ustawiona na wartość 0. Minidumps utworzone za pomocą polecenia .dump /m lub .dump polecenia mają ograniczone dane specyficzne dla środowiska CLR i umożliwiają prawidłowe uruchamianie tylko podzestawu poleceń SOS. Niektóre polecenia mogą zakończyć się niepowodzeniem z nieoczekiwanymi błędami, ponieważ wymagane obszary pamięci nie są mapowane lub są tylko częściowo mapowane. Ta opcja chroni przed uruchamianiem niebezpiecznych poleceń przed minidumps. Obsługiwane tylko z windbg. |
Name2EE ( nazwa2ee) <nazwa modułu><lub nazwa metody> -lub- Name2EE<nazwa modułu>!<typ lub nazwa metody> |
Przedstawia strukturę MethodTable i strukturę EEClass dla określonego typu lub metody w określonym module.Określony moduł musi zostać załadowany w procesie. Aby uzyskać odpowiednią nazwę typu, przejrzyj moduł przy użyciu Ildasm.exe (IL Dezasembler). Możesz również przekazać * jako parametr nazwy modułu, aby przeszukać wszystkie załadowane moduły zarządzane. Nazwa modułu może być również nazwą debugera dla modułu, na przykład mscorlib lub image00400000 .To polecenie obsługuje składnię debugera systemu Windows < module >! <type >. Typ musi być w pełni kwalifikowany. |
ObjSize [ adres obiektu<>] | [-aggregate] [-stat] | Wyświetla rozmiar określonego obiektu. Jeśli nie określisz żadnych parametrów, polecenie ObjSize wyświetla rozmiar wszystkich obiektów znalezionych w zarządzanych wątkach, wyświetla wszystkie uchwyty modułu odśmiecania pamięci w procesie i sumuje rozmiar wszystkich obiektów wskazywanych przez te dojścia. Polecenie ObjSize zawiera rozmiar wszystkich obiektów podrzędnych oprócz obiektu nadrzędnego. Opcja -aggregate może być używana z argumentem -stat w celu uzyskania szczegółowego widoku typów, które są nadal zakorzenione. Używając !dumpheap -stat i !objsize -aggregate -stat, można określić, które obiekty nie są już rooted i zdiagnozować różne problemy z pamięcią. Obsługiwane tylko w systemie Windows. |
PrintException [-nested] [-lines] [ adres obiektu wyjątku<>] -lub- PE [-nested] [ adres obiektu wyjątku<>] |
Wyświetla i formatuje pola dowolnego obiektu pochodzącego z klasy Exception pod określonym adresem. Jeśli nie określisz adresu, polecenie PrintException wyświetli ostatni wyjątek zgłoszony w bieżącym wątku. Opcja —zagnieżdżona wyświetla szczegółowe informacje o obiektach wyjątków zagnieżdżonych. Opcja -lines wyświetla informacje źródłowe, jeśli są dostępne. Za pomocą tego polecenia można sformatować i wyświetlić pole _stackTrace , które jest tablicą binarną. |
ProcInfo [-env] [-time] [-mem] | Wyświetla zmienne środowiskowe dla procesu, czasu procesora jądra i statystyk użycia pamięci. Obsługiwane tylko z windbg. |
RCWCleanupList<adres RCWCleanupList> | Wyświetla listę wywoływanych otoek środowiska uruchomieniowego pod określonym adresem, które oczekują na oczyszczanie. Obsługiwane tylko z windbg. |
SaveModule<adres podstawowy><nazwa pliku> | Zapisuje obraz, który jest ładowany w pamięci pod określonym adresem, do określonego pliku. Obsługiwane tylko z windbg. |
SetHostRuntime [<runtime-directory>] | To polecenie ustawia ścieżkę do środowiska uruchomieniowego platformy .NET do hostowania kodu zarządzanego, który jest uruchamiany w ramach soS w debugerze (LLDB). Środowisko uruchomieniowe musi mieć co najmniej wersję 2.1.0 lub nowszą. Jeśli w katalogu znajdują się spacje, musi być on cytowany pojedynczo ('). Zwykle sos próbuje znaleźć zainstalowane środowisko uruchomieniowe platformy .NET w celu automatycznego uruchomienia kodu zarządzanego, ale to polecenie jest dostępne, jeśli nie powiedzie się. Wartością domyślną jest użycie tego samego środowiska uruchomieniowego (libcoreclr) debugowanego. Użyj tego polecenia, jeśli debugowane domyślne środowisko uruchomieniowe nie działa wystarczająco, aby uruchomić kod SOS lub jeśli wersja jest mniejsza niż 2.1.0. Jeśli podczas uruchamiania polecenia SOS zostanie wyświetlony następujący komunikat o błędzie, użyj tego polecenia, aby ustawić ścieżkę do wersji 2.1.0 lub nowszej środowiska uruchomieniowego platformy .NET. (lldb) clrstack Error: Fail to initialize CoreCLR 80004005 ClrStack failed (lldb) sethostruntime /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.6 Możesz użyć polecenia "dotnet --info" w powłoce poleceń, aby znaleźć ścieżkę zainstalowanego środowiska uruchomieniowego platformy .NET. |
SetSymbolServer [-ms] [-disable] [-log] [-loadsymbols] [-cache<cache-path>] [-directory<search-directory>] [-sympath<windows-symbol-path>] [<symbol-serwer-URL>] | Włącza obsługę pobierania serwera symboli. Opcja -ms umożliwia pobieranie z publicznego serwera symboli firmy Microsoft. Opcja -disable włącza obsługę pobierania symboli. Opcja>-cache-cache-path<określa katalog pamięci podręcznej symboli. Wartość domyślna to $HOME/.dotnet/symbolcache, jeśli nie zostanie określona. Opcja -directory dodaje ścieżkę do wyszukiwania symboli. Może być więcej niż jeden. Opcja -sympath dodaje ścieżki serwera, pamięci podręcznej i katalogu w formacie ścieżki symboli systemu Windows. Opcja -log umożliwia rejestrowanie pobierania symboli. Opcja -loadsymbols próbuje pobrać natywne symbole platformy .NET dla środowiska uruchomieniowego. Obsługiwane w systemach lldb i dotnet-dump. |
SOSFlush | Opróżnia wewnętrzną pamięć podręczną SOS. |
SOSStatus [-reset] | Wyświetla wewnętrzny stan SOS lub resetuje stan wewnętrznej pamięci podręcznej. |
StopOnException [pochodnych ] [-create | -create2] <Wyjątek><pseudorejestracja> | Powoduje zatrzymanie debugera po wystąpieniu określonego wyjątku, ale kontynuowanie działania w przypadku zgłaszania innych wyjątków. Opcja pochodna przechwytuje określony wyjątek i każdy wyjątek pochodzący z określonego wyjątku. Obsługiwane tylko z windbg. |
SyncBlk [-all | <numer syncblk>] | Wyświetla określoną strukturę SyncBlock lub wszystkie struktury SyncBlock . Jeśli nie przekażesz żadnych argumentów, polecenie SyncBlk wyświetli strukturę SyncBlock odpowiadającą obiektom należącym do wątku.Struktura SyncBlock to kontener do dodatkowych informacji, które nie muszą być tworzone dla każdego obiektu. Może przechowywać dane międzyoperacyjne modelu COM, kody skrótów i blokować informacje na potrzeby operacji bezpiecznych wątkowo. |
ThreadPool | Przedstawia informacje o zarządzanej puli wątków, w tym liczbę żądań pracy w kolejce, liczbę wątków portów ukończenia i liczbę czasomierzy. |
Threads (clrthreads) [-live] [-special] | Wyświetla wszystkie zarządzane wątki w procesie. Polecenie Threads wyświetla skrócony identyfikator debugera, identyfikator wątku CLR i identyfikator wątku systemu operacyjnego. Ponadto w poleceniu Threads jest wyświetlana kolumna Domena wskazująca domenę aplikacji, w której jest wykonywany wątek, kolumnę APT wyświetlającą tryb mieszkania COM oraz kolumnę Wyjątek, która wyświetla ostatni wyjątek zgłoszony w wątku. Opcja -live wyświetla wątki skojarzone z wątkiem na żywo. Opcja -special wyświetla wszystkie specjalne wątki utworzone przez CLR. Specjalne wątki obejmują wątki odzyskiwania pamięci (w równoczesnym i odzyskiwania pamięci serwera), wątki pomocnika debugera, wątki finalizatora, AppDomain zwalnianie wątków i wątków czasomierza puli wątków. Obsługiwane w przypadku natywnych aplikacji AOT. |
pole ThreadState <Stan> | Wyświetla stan wątku. Parametr value jest wartością pola State w danych wyjściowych raportu Threads. |
Token2EE<nazwa modułu><tokenu> | Zamienia określony token metadanych w określonym module na strukturę MethodTable lub MethodDesc strukturę.Możesz przekazać * parametru nazwy modułu, aby znaleźć, do czego ten token jest mapowany w każdym załadowanym module zarządzanym. Możesz również przekazać nazwę debugera dla modułu, na przykład mscorlib lub image00400000 . |
Wyświetla adnotację dezasemblacji metody zarządzanej określonej przez wskaźnik struktury MethodDesc dla metody lub przez adres kodu w treści metody. Polecenie U wyświetla całą metodę od początku do końca z adnotacjami, które konwertują tokeny metadanych na nazwy.Opcja -gcinfo powoduje wyświetlenie struktury GCInfo dla metody polecenia U.Opcja -ehinfo wyświetla informacje o wyjątku dla metody . Te informacje można również uzyskać za pomocą polecenia Opcja -n wyłącza wyświetlanie nazw plików źródłowych i numerów wierszy. Jeśli debuger ma wybraną opcję SYMOPT_LOAD_LINES, SOS wyszukuje symbole dla każdej zarządzanej ramki i, jeśli się powiedzie, wyświetla odpowiednią nazwę pliku źródłowego i numer wiersza. Możesz określić opcję -n, aby wyłączyć to zachowanie. |
|
VerifyHeap | Sprawdza stertę modułu odśmiecającego śmieci pod kątem oznak uszkodzenia i wyświetla wszelkie znalezione błędy. Uszkodzenia stert mogą być spowodowane przez wywołania platformy, które są konstruowane nieprawidłowo. Obsługiwane w przypadku natywnych aplikacji AOT. |
verifyObj<adres obiektu> | Sprawdza obiekt, który jest przekazywany jako argument pod kątem oznak uszkodzenia. Obsługiwane tylko w systemie Windows. |
VMMap | Przechodzi przez wirtualną przestrzeń adresową i wyświetla typ ochrony zastosowany do każdego regionu. Obsługiwane tylko z windbg. |
VMStat | Zawiera widok podsumowania wirtualnej przestrzeni adresowej uporządkowane według każdego typu ochrony stosowanej do tej pamięci (wolna, zarezerwowana, zatwierdzona, prywatna, mapowana, obraz). Kolumna TOTAL wyświetla wynik kolumny AVERAGE pomnożony przez kolumnę BLK COUNT. Obsługiwane tylko z windbg. |
Debuger systemu Windows
Można również użyć rozszerzeń debugera platformy .NET, ładując je do debugera WinDbg/dbg i wykonując polecenia w debugerze systemu Windows. Polecenia mogą być używane w procesach na żywo lub zrzutach.
Windbg powinien ładować rozszerzenie automatycznie za każdym razem, gdy debugowany proces zawiera środowisko uruchomieniowe platformy .NET (coreclr.dll lub libcoreclr.so).
Debuger LLDB
Aby uzyskać instrukcje dotyczące konfigurowania rozszerzeń debugera platformy .NET dla usługi LLDB, zobacz dotnet-debugger-extensions. Polecenia mogą być używane w procesach na żywo lub zrzutach.
Domyślnie możesz uzyskać dostęp do wszystkich poleceń, wprowadzając polecenie: sos [command_name]
. Jednak typowe polecenia zostały aliasowane, aby nie były potrzebne prefiks sos
:
Polecenie | Funkcja |
---|---|
analyzeoom |
Przedstawia informacje o ostatnim obiekcie OOM, które wystąpiły w żądaniu alokacji do sterty GC. |
bpmd |
Tworzy punkt przerwania w określonej metodzie zarządzanej w określonym module. |
clrmodules |
Wyświetla listę zarządzanych modułów w procesie. |
clrstack |
Udostępnia ślad stosu tylko kodu zarządzanego. |
clrthreads |
Wyświetla listę zarządzanych wątków, które są uruchomione. |
clru |
Wyświetla adnotację dezasemblacji metody zarządzanej. |
dbgout |
Włącza/wyłącza (-off ) wewnętrzne rejestrowanie SOS. |
dso |
Wyświetla wszystkie obiekty zarządzane 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 strukturze EEClass 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ą. |
dumplock |
Wyświetla informacje o obiektach System.Threading.Lock, takich jak te przechowywane przez wątki (domyślnie) lub te, na które są czekane wątki. To polecenie jest dostępne tylko w rozszerzeniach debugera platformy .NET |
dumplog |
Zapisuje zawartość dziennika obciążenia w pamięci do określonego pliku. |
dumpmd |
Wyświetla informacje o strukturze MethodDesc 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. |
dumpstack |
Wyświetla natywny i zarządzany ślad stosu. |
dumpstackobjects |
Wyświetla wszystkie obiekty zarządzane 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 dumpstack we wszystkich wątkach 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. |
finalizequeue |
Przedstawia wszystkie obiekty zarejestrowane do finalizacji. |
findappdomain |
Próbuje rozpoznać domenę AppDomain obiektu GC. |
findroots |
Znajduje i wyświetla korzenie obiektów w kolekcjach GC. |
gchandles |
Wyświetla statystyki dotyczące uchwytów modułu odśmieceń 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 stresu zapisanego w debuggee. |
histobj |
Sprawdza wszystkie rekordy relokacji dziennika stresu i wyświetla łańcuch relokacji odzyskiwania pamięci, które mogły doprowadzić 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 dotyczące zarówno promocji, jak i relokacji określonego katalogu głównego. |
histstats |
Wyświetla statystyki dziennika obciążenia. |
ip2md |
Wyświetla strukturę MethodDesc na określonym adresie w kodzie, który został skompilowany w trybie JIT. |
listnearobj |
Wyświetla obiekt poprzedzający i udany określony adres. |
loadsymbols |
Ładuje symbole modułu natywnego platformy .NET. |
logging |
Włącza/wyłącza wewnętrzne rejestrowanie SOS. |
name2ee |
Przedstawia struktury MethodTable 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 |
Wyświetla i formatuje pola dowolnego obiektu pochodzącego z klasy Exception pod określonym adresem. |
printexception |
Wyświetla i formatuje pola dowolnego obiektu pochodzącego z klasy Exception pod określonym adresem. |
runtimes |
Wyświetla listę środowisk uruchomieniowych w obiekcie docelowym lub zmień domyślne środowisko uruchomieniowe. |
stoponcatch |
Proces docelowy spowoduje przerwanie przy następnym przechwyceniu wyjątku zarządzanego podczas wykonywania. |
setclrpath |
Ustawia ścieżkę do ładowania plików dac/dbi coreclr.
setclrpath <path> . |
sethostruntime |
Ustawia lub wyświetla katalog środowiska uruchomieniowego platformy .NET, który ma być używany do uruchamiania kodu zarządzanego w sos. |
setsymbolserver |
Włącza obsługę serwera symboli. |
setsostid |
Ustawia bieżący indeks tid/thread systemu operacyjnego zamiast używać tego, który jest zapewniany przez usługę LLDB.
setsostid <tid> <index> . |
sos |
Wykonuje różne polecenia debugowania coreclr. Użyj składni sos <command-name> <args> . Aby uzyskać więcej informacji, zobacz "soshelp". |
soshelp |
Wyświetla wszystkie dostępne polecenia, gdy nie określono parametru, lub wyświetla szczegółowe informacje pomocy dotyczące określonego polecenia: soshelp <command> . |
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. |
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 obiekt, który jest przekazywany jako argument pod kątem oznak uszkodzenia. |
Przykład użycia narzędzia Windbg/cdb
Polecenie | Opis |
---|---|
!dumparray -start 2 -length 5 -details 00ad28d0 |
Wyświetla zawartość tablicy pod adresem 00ad28d0 . Ekran rozpoczyna się od drugiego elementu i kontynuuje działanie dla pięciu elementów. |
!dumpassembly 1ca248 |
Wyświetla zawartość zestawu pod adresem 1ca248 . |
!dumpheap |
Wyświetla informacje o stercie modułu odśmiecającego śmieci. |
!DumpLog |
Zapisuje zawartość dziennika obciążenia w pamięci do pliku (domyślnego) o nazwie StressLog.txt w bieżącym katalogu. |
!dumpmd 902f40 |
Wyświetla strukturę MethodDesc pod adresem 902f40 . |
!dumpmodule 1caa50 |
Wyświetla informacje o module pod adresem 1caa50 . |
!DumpObj a79d40 |
Wyświetla informacje o obiekcie pod adresem a79d40 . |
!DumpVC 0090320c 00a79d9c |
Wyświetla pola klasy wartości pod adresem 00a79d9c przy użyciu tabeli metod pod adresem 0090320c . |
!eeheap -gc |
Wyświetla pamięć procesu używaną przez moduł odśmiecający pamięć. |
!finalizequeue |
Wyświetla wszystkie obiekty zaplanowane do finalizacji. |
!findappdomain 00a79d98 |
Określa domenę aplikacji obiektu pod adresem 00a79d98 . |
!gcinfo 5b68dbb8 |
Wyświetla wszystkie uchwyty modułu odśmieceń pamięci w bieżącym procesie. |
!name2ee unittest.exe MainClass.Main |
Wyświetla struktury MethodTable i EEClass dla metody Main w MainClass klasy w unittest.exe modułu . |
!token2ee unittest.exe 02000003 |
Wyświetla informacje o tokenie metadanych pod adresem 02000003 w module unittest.exe . |
Przykładowe użycie usługi LLDB
Polecenie | Opis |
---|---|
dumparray -start 2 -length 5 -details 00ad28d0 |
Wyświetla zawartość tablicy pod adresem 00ad28d0 . Ekran rozpoczyna się od drugiego elementu i kontynuuje działanie dla pięciu elementów. |
dumpassembly 1ca248 |
Wyświetla zawartość zestawu pod adresem 1ca248 . |
dumpheap |
Wyświetla informacje o stercie modułu odśmiecającego śmieci. |
dumplog |
Zapisuje zawartość dziennika obciążenia w pamięci do pliku (domyślnego) o nazwie StressLog.txt w bieżącym katalogu. |
dumpmd 902f40 |
Wyświetla strukturę MethodDesc pod adresem 902f40 . |
dumpmodule 1caa50 |
Wyświetla informacje o module pod adresem 1caa50 . |
dumpobj a79d40 |
Wyświetla informacje o obiekcie pod adresem a79d40 . |
dumpvc 0090320c 00a79d9c |
Wyświetla pola klasy wartości pod adresem 00a79d9c przy użyciu tabeli metod pod adresem 0090320c . |
eeheap -gc |
Wyświetla pamięć procesu używaną przez moduł odśmiecający pamięć. |
findappdomain 00a79d98 |
Określa domenę aplikacji obiektu pod adresem 00a79d98 . |
gcinfo 5b68dbb8 |
Wyświetla wszystkie uchwyty modułu odśmieceń pamięci w bieżącym procesie. |
name2ee unittest.exe MainClass.Main |
Wyświetla struktury MethodTable i EEClass dla metody Main w MainClass klasy w unittest.exe modułu . |
token2ee unittest.exe 02000003 |
Wyświetla informacje o tokenie metadanych pod adresem 02000003 w module unittest.exe . |
clrthreads |
Wyświetla zarządzane wątki. |
Zobacz też
- Wprowadzenie do zrzutów na platformie .NET
- Dowiedz się, jak debugować przeciek pamięci na platformie .NET
- zbieranie i analizowanie zrzutów pamięci
- narzędzia analizy zrzutu
(dotnet-dump) - instalator rozszerzeń debugera platformy .NET (dotnet-debugger-extensions)
- narzędzia analizy stert
(dotnet-gcdump)