Udostępnij za pośrednictwem


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-

da [-startstartIndex] [-lengthdługości] [-details] [-nofields] adres obiektu tablicy
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 -details wyświetla szczegóły elementu przy użyciu DumpObj i formatów DumpVC.

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 ValueTaski 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.
adresEEClass DumpClass 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 , użyj polecenianarzędzia DumpObj, Name2EElub Token2EE.
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 SyncBlk.

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.
zarządzanego obiektu DynamicMethoddumpIL | wskaźnik DynamicMethodDesc | MethodDesc wskaźnik 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-

adres obiektuDO
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.
DumpRuntimeTypes 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] [topstack [bottomstack]] 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] [topstack [bottomstack]]

-lub-

DSO [-verify] [topstack [bottomstack]]
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 -EE jest przekazywana bezpośrednio do polecenia DumpStack. Parametr -short ogranicza dane wyjściowe do następujących rodzajów wątków:

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.
FindRoots-genN | -gen any | adres obiektu 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 obiektuGCWhere 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.
root HistRoot 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.
U [-gcinfo] [-ehinfo] [-n] adres MethodDesc | adres kodu 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 EHInfo.

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.exemoduł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.exemoduł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ż