Udostępnij za pośrednictwem


Rozszerzenie debugowania SOS

Rozszerzenie debugowania SOS umożliwia wyświetlanie informacji o kodzie uruchomionym w środowisku uruchomieniowym platformy .NET, zarówno w procesach na żywo, jak i zrzutach. Rozszerzenie jest wstępnie zainstalowane za pomocą polecenia dotnet-dump i Windbg/dbg i można je pobrać do użycia z usługą LLDB. Możesz użyć rozszerzenia debugowania SOS, aby:

  • 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.

Składnia

W systemie Windows: ![command] [options]

W systemach Linux i macOS: 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 obszarze Pomoc lub soshelp. Indywidualna pomoc dotycząca poleceń jest dostępna przy użyciu polecenia soshelp <command>.

Polecenie opis
bpmd [-nofuturemodule] [<nazwa> metody nazwy><modułu] [-md><MethodDesc] -list -clear<pending breakpoint number-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, -clear i -clearall :

Opcja -list generuje listę wszystkich oczekujących punktów przerwania. Jeśli oczekujący punkt przerwania ma niezerowy identyfikator modułu, ten punkt przerwania jest właściwy dla funkcji w tym określonym załadowanym module. Jeśli oczekujący punkt przerwania ma zerowy identyfikator modułu, 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] Dostarcza ślad stosu wyłącznie dla kodu zarządzanego.

Opcja -p pokazuje argumenty funkcji zarządzanej.

Opcja -l zawiera informacje o zmiennych lokalnych w ramce. Rozszerzenie debugowania SOS nie może pobrać nazw lokalnych, więc dane wyjściowe dla nazw lokalnych są w formacie <wartości> adresu lokalnego<=>.

Opcja -a jest skrótem dla -l i -p połączone.

Opcja -n wyłącza wyświetlanie nazw plików źródłowych i numerów wierszy. Jeśli opcja debugera SYMOPT_LOAD_LINES jest określona, SOS będzie wyszukiwać symbole dla każdej ramki zarządzanej i jeśli wyszukiwanie zakończy się pomyślnie, wyświetlona zostanie odpowiadająca nazwa pliku źródłowego i numer wiersza. Parametr -n (Bez numerów wierszy) można określić, aby wyłączyć to zachowanie.

Opcja -f (tryb pełny) wyświetla natywne ramki przeplatające je z zarządzanymi ramkami oraz nazwą zestawu i przesunięciem funkcji dla ramek zarządzanych. Ta opcja nie wyświetla ramek natywnych w przypadku użycia z dotnet-dumpprogramem .

Opcja -r zrzutuje rejestry dla każdej ramki stosu.

Opcja -all zrzutuje wszystkie stosy zarządzanych wątków.
COMState Wyświetla model apartamentu COM dla każdego wątku i Context wskaźnika, jeśli jest dostępny. To polecenie jest obsługiwane tylko w systemie Windows.
DumpArray [-startIndex<>] [-length<length>] [-details] [-nofields]< adres obiektu tablicy>

— lub —

DA [-start startIndex><] [-length<length>] [-details] [-nofields] adres obiektu tablicy>
Sprawdza elementy obiektu tablicowego.

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 formatów DumpObj i 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 partial type<name>] [-waiting] [-roots] [-roots] Funkcja DumpAsync przechodzi przez 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ą następujące elementy:
- 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.
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 .
Adres dumpClass EEClass<> Wyświetla informacje o EEClass strukturze skojarzonej z typem.

Polecenie DumpClass wyświetla wartości pól statycznych, ale nie wyświetla wartości pól niestatycznych.

Użyj polecenia DumpMT, DumpObj, Name2EE lub Token2EE, aby uzyskać EEClass adres struktury.
DumpDomain [<adres> domeny] Wylicza każdy Assembly obiekt załadowany w określonym AppDomain adresie obiektu. Po wywołaniu bez parametrów polecenie DumpDomain wyświetla listę wszystkich AppDomain obiektów w procesie. Ponieważ platforma .NET (Core) ma tylko jeden AppDomainobiekt , funkcja DumpDomain zwraca tylko jeden obiekt.
DumpHeap [-stat] [-strings] [-short] [-min<size] [-max<size>>] [-thinlock] [-startAtLowerBound] [-mt<MethodTable address>] [-type partial type<name>] [start [end]] Wyświetla informacje dotyczące sterty zebranej podczas odśmiecania pamięci i statystyk odśmiecania w stosunku do obiektów.

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. Dzięki temu można łatwo strumieniować dane wyjściowe z polecenia do innego polecenia debugera w celu automatyzacji.

Opcja -min ignoruje obiekty, które są mniejsze niż size parametr określony w bajtach.

Opcja -max ignoruje obiekty, które są większe niż size parametr określony w bajtach.

Opcja -thinlock zgłasza ThinLocks. Aby uzyskać więcej informacji, zobacz polecenie SyncBlk .

Opcja -startAtLowerBound wymusza przejście sterta na początek dolnej granicy podanego zakresu adresów. Podczas fazy planowania sterta często nie posiada funkcji przechodzenia, ponieważ obiekty są przenoszone. Ta opcja wymusza dumpHeap , aby rozpocząć jego pracę w określonej dolnej granicy. Należy podać adres prawidłowego obiektu jako dolną granicę, aby ta opcja działała. Można wyświetlić pamięć pod adresem błędnego obiektu, aby ręcznie odnaleźć następną tabelę metod. Jeśli odzyskiwanie pamięci jest obecnie w wywołaniu memcopymetody , 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 wyświetla tylko te obiekty, które odpowiadają określonej MethodTable strukturze.

Opcja -type 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.
DumpIL Managed DynamicMethod object> | <<Wskaźnik DynamicMethodDesc> | <Wskaźnik MethodDesc> 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.
DumpLog [-addr<addressOfStressLog>] [<Nazwa pliku>] Zapisuje zawartość dziennika obciążenia pamięci do określonego pliku. Jeśli nazwa nie zostanie określona, polecenie tworzy plik o nazwie StressLog.txt w bieżącym katalogu.

Dziennik obciążenia pamięci pomaga w diagnozowaniu błędów obciążenia pamięci 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

Opcja opcjonalna -addr umożliwia określenie dziennika przeciążeń innego niż dziennik domyślny.
Adres DumpMD<MethodDesc> Wyświetla informacje o MethodDesc strukturze pod określonym adresem.

Aby uzyskać MethodDesc adres struktury z funkcji zarządzanej, możesz użyć polecenia IP2MD.
DumpMT [-MD] MethodTable address (Adres metody DumpMT [-MD] <> Wyświetla informacje dotyczące tabeli metod pod podanym 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.
Adres modułu DumpModule [-mt] <> Wyświetla informacje dotyczące modułu pod podanym 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 .
Adres obiektu DumpObj [-nofields] <>

— lub —

Adres obiektu DO<>
Wyświetla informacje dotyczące obiektu pod podanym adresem. Polecenie DumpObj wyświetla pola, EEClass informacje o strukturze, tabelę metod i rozmiar obiektu.

Aby pobrać adres obiektu, możesz użyć polecenia DumpStackObjects .

Możesz uruchomić polecenie DumpObj w polach typu CLASS , ponieważ są również obiektami.

Opcja -pól nofield 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śmiecania pamięci i wyświetla ich nazwy skojarzonych typów i tabele metod.
DumpStack [-EE] [-n] [top stos [bottom stos]] Wyświetla ślad stosu.

Opcja -EE powoduje, że polecenie DumpStack wyświetla tylko funkcje zarządzane. top Użyj parametrów ibottom, 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 opcja debugera SYMOPT_LOAD_LINES jest określona, SOS będzie wyszukiwać symbole dla każdej ramki zarządzanej i jeśli wyszukiwanie zakończy się pomyślnie, wyświetlona zostanie odpowiadająca nazwa pliku źródłowego i numer wiersza. Parametr -n (Bez numerów wierszy) można określić, aby wyłączyć to zachowanie.
DumpSig<sigaddr moduleaddr><> Wyświetla informacje o Sig strukturze pod określonym adresem.
DumpSigElem<sigaddr moduleaddr><> Wyświetla jeden element obiektu podpisu. W większości przypadków należy użyć narzędzia 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 fragmenty.
DumpStackObjects [-verify] [top stos [bottom stos]]

— lub —

DSO [-verify] [top stos [bottom stos]]
Wyświetla wszystkie zarządzane obiekty znalezione w granicach bieżącego stosu.

Opcja -verify weryfikuje każde pole niestatyczne CLASS pola obiektu.

Użyj polecenia DumpStackObject z poleceniami śledzenia stosu, takimi jak K (windbg) lub bt (lldb) wraz z poleceniem clrstack, aby określić wartości zmiennych lokalnych i parametrów.
Adres metody DumpVC<MethodTable><> Wyświetla informacje dotyczące pól klasy wartości pod podanym adresem.

Parametr MethodTable umożliwia polecenie DumpVC poprawne interpretowanie pól. Klasy wartości nie posiadają tabeli metod jako ich pierwsze pole.
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śmiecania pamięci wyświetlają zakresy każdego segmentu w zarządzanej 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 uzyskały blokadę.

Wątki, które zostały zatrzymane w celu umożliwienia odśmiecenia pamięci.

Wątki, które są obecnie w kodzie zarządzanym.
EHInfo [<Adres> MethodDesc] [<Adres> kodu] Wyświetla bloki obsługi wyjątków w określonej metodzie. To polecenie wyświetla adresy kodu i przesunięcia dla bloku klauzuli ( try bloku) i bloku procedury obsługi ( catch bloku).
Często zadawane pytania Wyświetla najczęściej zadawane pytania. Nieobsługiwane w programie dotnet-dump.
FinalizeQueue [-detail] | [-allReady] [-short] Wyświetla wszystkie obiekty zarejestrowane dla finalizacji.

Opcja -detail wyświetla dodatkowe informacje o wszystkich SyncBlocks , które muszą zostać wyczyszczone, oraz wszelkie RuntimeCallableWrappers (RCWs), które oczekują na oczyszczanie. Obie te struktury danych są buforowane i oczyszczane przez wątek finalizatora w trakcie jego działania.

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, które znajdują się na liście „gotowych do finalizacji”, są obiektami, które można sfinalizować i które nie są już zakorzenione. Ta opcja może być bardzo kosztowna, ponieważ weryfikuje, 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 używany w połączeniu z -allReady, wylicza wszystkie obiekty, które mają finalizator, który nie jest już rooted. Jeśli jest używana samodzielnie, 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 podanym adresem.
FindRoots -gen<N> | -gen any |<adres obiektu> Powoduje przerwanie debugowania w obiekcie debugowanym podczas kolejnego zbierania dla określonej generacji. Efekt jest resetowany natychmiast po wystąpieniu przerwania. Aby przerwać podczas kolejnego zbierania, należy ponownie wydać polecenie. Forma <adresu> obiektu tego polecenia jest używana po przerwie spowodowanej przez wartość -gen lub -gen. W tym czasie debugowanie jest w odpowiednim stanie dla elementów FindRoots w celu zidentyfikowania 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śmiecania pamięci w procesie.

Opcja -perdomain rozmieszcza statystyki według domeny aplikacji.

Użyj polecenia GCHandles, aby znaleźć przecieki pamięci spowodowane przeciekami modułu odśmieceń pamięci. Przykładowo wyciek pamięci występuje, gdy kod zachowuje dużą tablicę, ponieważ silny uchwyt modułu odśmiecania pamięci nadal na nią wskazuje, a uchwyt został odrzucony bez jej zwolnienia.

Obsługiwane tylko w systemie Windows.
GCHandleLeaks Wyszukuje w pamięci dowolnych odwołań do silnych i przypiętych uchwytów modułu odśmiecania pamięci w procesie i wyświetla wyniki. Jeśli znaleziono uchwyt, polecenie GCHandleLeaks wyświetla adres odwołania. Jeśli uchwyt nie zostanie znaleziony w pamięci, polecenie wyświetli powiadomienie. Obsługiwane tylko w systemie Windows.
Adres code GCInfo<><MethodDesc> Wyświetla dane, które wskazują, kiedy rejestry lub lokalizacje stosu zawierają obiekty zarządzane. Jeśli występuje odśmiecanie pamięci, moduł musi znać lokalizacje odwołań do obiektów, aby móc je zaktualizować za pomocą nowych wartości wskaźnika obiektu.
GCRoot [-nostacks] [-all] <Adres obiektu> Wyświetla informacje dotyczące odwołań (lub korzeni) do obiektu pod podanym adresem.

Polecenie GCRoot sprawdza całą zarządzaną stertę i tabelę uchwytów dla dojść w innych obiektach i uchwytach na stosie. Każdy stos jest następnie przeszukiwany w celu znalezienia wskaźników do obiektów; kolejka finalizatorów również będzie przeszukiwana.

To polecenie nie określa, czy korzeń stosu jest nieprawidłowy lub odrzucony. Użyj poleceń clrstack i 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 modułu odśmiecania pamięci i osiągalnych obiektów.

Opcja -all wymusza wyświetlanie wszystkich korzeni zamiast tylko unikatowych korzeni.
Adres obiektu GCWhere< > Wyświetla lokalizację i rozmiar przekazanego argumentu w stercie modułu odśmiecania pamięci. Gdy argument znajduje się w stercie zarządzanej, ale nie jest prawidłowym adresem obiektu, rozmiar zostanie wyświetlony jako 0 (zero).
Pomoc (soshelp) [<polecenie>] [faq] Wyświetla wszystkie dostępne polecenia, gdy parametr nie jest określony, 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 | ] Wyświetla rozmiary generacji dla każdej sterty i całkowitą ilość wolnego miejsca w każdej generacji na każdym stosie. 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ę Hist poleceń.

Ogólnie rzecz biorąc, nie trzeba jawnie wywoływać HistClearmetody , ponieważ każda HistInit z nich czyści poprzednie zasoby.
HistInit Inicjuje struktury SOS z dziennika obciążenia zapisanego w obiekcie debugowanym.
HistObj <obj_address> Sprawdza wszystkie rekordy przeniesienia dziennika obciążenia i wyświetla łańcuch przeniesień modułu odśmiecania pamięci, które mogły doprowadzić do adresu przekazanego jako argument.
HistObjFind <obj_address> Wyświetla wszystkie wpisy dziennika, które odwołują się do obiektu pod podanym adresem.
Katalog główny HistRoot <> Wyświetla informacje powiązane zarówno z promocjami, jak i przeniesieniami określonego korzenia.

Wartość korzenia może być użyta do śledzenia ruchu obiektu za pomocą modułu odśmiecania pamięci.
Adres kodu IP2MD (ip2md) <> MethodDesc Wyświetla strukturę na określonym adresie w kodzie, który został skompilowany w trybie JIT.
Obj_address ListNearObj (lno) <> Wyświetla obiekty poprzedzające i następujące po określonym adresie. Polecenie wyszukuje adres w stercie modułu odśmiecania pamięci podobny do prawidłowego początku obiektu zarządzanego (na podstawie prawidłowej metody tabel) i obiektu następującego po adresie argumentu. Obsługiwane tylko w systemie Windows.
MinidumpMode [0] [1] Uniemożliwia uruchamianie poleceń niebezpiecznych podczas używania minizrzutu.

Przekaż 0 , aby wyłączyć tę funkcję lub 1 , aby włączyć tę funkcję. Domyślnie wartość MinidumpMode jest ustawiona na 0.

Minidumps utworzone za pomocą polecenia .dump /m lub .dump mają ograniczone dane specyficzne dla środowiska CLR i umożliwiają prawidłowe uruchamianie tylko podzestawu poleceń SOS. Niektóre polecenia mogą zakończyć się nieoczekiwanym błędem, ponieważ wymagane obszary pamięci nie są mapowane lub są tylko częściowo mapowane. Ta opcja chroni przed uruchamianiem poleceń niebezpiecznych w stosunku do minizrzutów.

Obsługiwane tylko z windbg.
Nazwa modułu Name2EE (name2ee<>)< lub nazwa metody>

— lub —

Nazwa> modułu Name2EE!<<nazwa typu lub metody>
MethodTable Przedstawia strukturę i EEClass strukturę dla określonego typu lub metody w określonym module.

Określony moduł musi zostać załadowany w procesie.

Aby uzyskać właściwą nazwę typu, przejrzyj moduł przy użyciu Ildasm.exe (DEzasembler IL). Możesz również przekazać * jako parametr nazwy modułu, aby przeszukać wszystkie załadowane moduły zarządzane. Parametr nazwy modułu może być również nazwą debugera dla modułu, takiego jak mscorlib lub image00400000.

To polecenie obsługuje składnię debugera systemu Windows .<module>!<type> Typ musi być w pełni kwalifikowany.
ObjSize [<adres> obiektu] | [-agregacja] [-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 elementu nadrzędnego.

Opcja -aggregate może być używana w połączeniu z argumentem -stat , aby uzyskać szczegółowy widok 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 [zagnieżdżone] [<adres> obiektu wyjątku]
Wyświetla i formatuje pola dowolnego obiektu pochodzącego z Exception klasy 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 -nested wyświetla szczegółowe informacje o zagnieżdżonych obiektach wyjątków.

Opcja -lines wyświetla informacje źródłowe, jeśli są dostępne.

Za pomocą tego polecenia można sformatować i wyświetlić _stackTrace pole, które jest tablicą binarną.
ProcInfo [-env] [-time] [-mem] Wyświetla zmienne środowiskowe dla procesu, czasu procesora dla jądra i statystyki użycia pamięci. Obsługiwane tylko z windbg.
RCWCleanupList<RCWCleanupList adres> Wyświetla listę otok wywoływanych w czasie wykonywania pod określonym adresem, które czekają na oczyszczanie. Obsługiwane tylko z windbg.
SaveModule<Nazwa pliku><adresupodstawowego> Zapisuje określony obraz, który jest załadowany do pamięci pod podanym 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-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 [-pochodne] [-create-create2 | ] <Numer pseudorejestracji wyjątku><> Powoduje zatrzymanie debugera, gdy określony wyjątek zostanie zgłoszony, ale kontynuuje działanie, gdy zgłaszane są inne wyjątki.

Opcja -pochodne przechwytuje określony wyjątek i każdy wyjątek, który pochodzi z określonego wyjątku.

Obsługiwane tylko z windbg.
SyncBlk [-all | <numer> syncblk] Wyświetla określoną SyncBlock strukturę lub wszystkie SyncBlock struktury. Jeśli nie przekażesz żadnych argumentów, polecenie SyncBlk wyświetli SyncBlock strukturę 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ędzyoperacyjnego modelu COM, kody skrótów i informacje dotyczące blokowania na potrzeby operacji bezpiecznych wątkowo.
Pula wątków Wyświetla informacje o puli wątków zarządzanych, w tym liczbę żądań pracy w kolejce, liczbę wątków portu zakończenia i liczbę czasomierzy.
Wątki (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 polecenie Wątki wyświetla kolumnę Domena wskazującą 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. Wątki specjalne obejmują wątki odzyskiwania pamięci (w trybie współbieżnym 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.
Pole wartości stanu ThreadState < > Wyświetla stan wątku. Parametr value jest wartością State pola w danych wyjściowych raportu Wątki .
Token nazwy modułu<>Token2EE<> Zamienia określony token metadanych w określonym module w MethodTable strukturę lub MethodDesc strukturę.

Możesz przekazać * parametr nazwy modułu, aby dowiedzieć się, 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 MethodDesc wskaźnik struktury 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, że polecenie U wyświetli GCInfo strukturę metody .

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 opcja debugera SYMOPT_LOAD_LINES jest określona, SOS wyszukuje symbole dla każdej zarządzanej ramki i jeśli wyszukiwanie zakończy się pomyślnie, wyświetla odpowiadającą nazwę pliku źródłowego i numer wiersza. Możesz określić opcję -n , aby wyłączyć to zachowanie.
VerifyHeap Sprawdza sterty modułu odśmiecania pamięci w poszukiwaniu objawów uszkodzeń i wyświetla znalezione błędy.

Uszkodzenie sterty może być spowodowane przez wywołania platformy, które są konstruowane niepoprawnie.
VerifyObj<, adres obiektu> Sprawdza, czy obiekt, który jest przekazywany jako argument posiada oznaki uszkodzenia. Obsługiwane tylko w systemie Windows.
VmMap Przechodzi wirtualną przestrzeń adresową i wyświetla typ ochrony stosowany do każdego regionu. Obsługiwane tylko z windbg.
VMStat Dostarcza widok podsumowania wirtualnej przestrzeni adresowej, uporządkowany według typów ochrony stosowanych do pamięci (wolna, zarezerwowana, zatwierdzona, prywatna, mapowana, obrazów). Kolumna TOTAL wyświetla wynik z kolumny AVERAGE pomnożony przez kolumnę BLK COUNT. Obsługiwane tylko z windbg.

Dotnet-Dump

Aby uzyskać listę dostępnych poleceń SOS za pomocą dotnet-dump analyzepolecenia , zobacz dotnet-dump.

Debuger systemu Windows

Można również użyć rozszerzenia debugowania SOS, ładując je do debugera WinDbg/dbg i wykonując polecenia w debugerze systemu Windows. Polecenia SOS mogą być używane w procesach na żywo lub zrzutach.

Windbg powinien ładować rozszerzenie SOS 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 soS dla usługi LLDB, zobacz dotnet-sos. Polecenia SOS mogą być używane w procesach na żywo lub zrzutach.

Domyślnie możesz uzyskać dostęp do wszystkich poleceń SOS, wprowadzając polecenie: sos [command_name]. Jednak typowe polecenia zostały aliasowane, aby nie trzeba było prefiksu sos :

Polecenie Function
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 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.
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.
dumpstack Wyświetla natywny i zarządzany ślad stosu.
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.
finalizequeue Wyświetla wszystkie obiekty zarejestrowane dla 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ś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 przeniesienia dziennika obciążenia i wyświetla łańcuch przeniesień modułu odśmiecania 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 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.
loadsymbols Ładuje symbole modułu natywnego platformy .NET.
logging Włącza/wyłącza wewnętrzne rejestrowanie SOS.
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 Wyświetla i formatuje pola dowolnego obiektu pochodzącego z Exception klasy pod określonym adresem.
printexception Wyświetla i formatuje pola dowolnego obiektu pochodzącego z Exception klasy 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, co zapewnia 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, czy obiekt, który jest przekazywany jako argument posiada oznaki 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. Wyświetlanie zaczyna się od drugiego elementu, a następnie wyświetlonych zostaje pięć kolejnych 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 MethodDesc Wyświetla strukturę 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 MethodTable Wyświetla struktury i EEClass dla Main metody w klasie MainClass w module unittest.exe.
!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. Wyświetlanie zaczyna się od drugiego elementu, a następnie wyświetlonych zostaje pięć kolejnych 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 MethodDesc Wyświetla strukturę 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 MethodTable Wyświetla struktury i EEClass dla Main metody w klasie MainClass w module unittest.exe.
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ż