Udostępnij za pośrednictwem


SOS.dll (Rozszerzenie do debugowania SOS)

Ważne

Ten artykuł dotyczy wersji programu .NET Framework rozszerzenia debugowania SOS. Aby uzyskać informacje o nowszej wersji narzędzia .NET (Core), zobacz rozszerzenie debugowania SOS.

Rozszerzenie debugowania SOS (SOS.dll) ułatwia debugowanie programów zarządzanych w programie Visual Studio i w debugerze systemu Windows (WinDbg.exe), udostępniając informacje o wewnętrznym środowisku środowiska uruchomieniowego języka wspólnego (CLR). To narzędzie wymaga włączenia debugowania niezarządzanego w projekcie. SOS.dll jest instalowany automatycznie przy użyciu programu .NET Framework. Aby użyć SOS.dll w programie Visual Studio, zainstaluj zestaw sterowników systemu Windows (WDK).

Składnia

![command] [options]

Polecenia

Polecenie opis
AnalyzeOOM (ao) Przedstawia informacje dotyczące ostatniego braku pamięci (OOM), które wystąpiły w żądaniu alokacji do sterty odzyskiwania pamięci. (W module odśmiecania pamięci dla serwera wyświetla OOM, jeżeli wystąpił, dla każdej sterty modułu odśmiecania pamięci.)
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] 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(all) 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.

Rozszerzenie debugowania SOS nie wyświetla ramek przejścia na platformach opartych o procesory x64 i IA-64.
COMState Wyświetla model apartamentu COM dla każdego wątku i Context wskaźnika, jeśli jest dostępny.
DumpArray [-startIndex<>] [-length<length>] [-details] [-nofields]< adres obiektu tablicy>

— lub —

DA [-start startIndex><] [-length length<>] [-detail] [-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ę -detail .
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, który jest ładowany w określonym AppDomain adresie obiektu. Po wywołaniu bez parametrów polecenie DumpDomain wyświetla listę wszystkich AppDomain obiektów w procesie.
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 (szesnastkowy).

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

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

Należy pamiętać, że 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>] [<Filename>] 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.
DumpMethodSig<sigaddr moduleaddraddadd><r> Wyświetla informacje o MethodSig strukturze pod określonym adresem.
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 .

Należy pamiętać, że można 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.

Na platformach x86 i x64 polecenie DumpStack tworzy pełny ślad stosu.

Na platformach opartych na protokole IA-64 polecenie DumpStack naśladuje polecenie K debugera. Parametry top i bottom są ignorowane na platformach opartych na IA-64.
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 polecenie K i polecenie 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 CLR.

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.
EEVersion Wyświetla wersję środowiska CLR.
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.
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ń.
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.
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.
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] <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.
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).
help [<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.
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<> MethodDesc Wyświetla strukturę 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 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.
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.
Nazwa modułu 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ą.
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.
RCWCleanupList<RCWCleanupList adres> Wyświetla listę otok wywoływanych w czasie wykonywania pod określonym adresem, które czekają na oczyszczanie.
SaveModule<Nazwa pliku><adresupodstawowego> Zapisuje określony obraz, który jest załadowany do pamięci pod podanym adresem, do określonego pliku.
SOSFlush Opróżnia wewnętrzną pamięć podręczną SOS.
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.
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.
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.
Wątki [-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 .

Przykład:

0:003> !Threads ThreadCount: 2 UnstartedThread: 0 BackgroundThread: 1 PendingThread: 0 DeadThread: 0 Hosted Runtime: no PreEmptive GC Alloc Lock ID OSID ThreadOBJ State GC Context Domain Count APT Exception 0 1 250 0019b068 a020 Disabled 02349668:02349fe8 0015def0 0 MTA 2 2 944 001a6020 b220 Enabled 00000000:00000000 0015def0 0 MTA (Finalizer) 0:003> !ThreadState b220 Legal to Join Background CLR Owns CoInitialized In Multi Threaded Apartment
TraverseHeap [-xml] <nazwa pliku> Zapisuje informacje dotyczące sterty do określonego pliku w formacie zrozumiałym dla profilera CLR. Opcja -xml powoduje, że polecenie TraverseHeap formatuje plik jako XML.
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.
VmMap Przechodzi wirtualną przestrzeń adresową i wyświetla typ ochrony stosowany do każdego regionu.
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.

Uwagi

Rozszerzenie debugowania SOS umożliwia wyświetlanie informacji o kodzie uruchomionym w środowisku CLR. Przykładowo rozszerzenia debugowania SOS można użyć do wyświetlania informacji na temat zarządzanej sterty, wyszukiwania uszkodzeń sterty, wyświetlania typów danych wewnętrznych używanych przez środowisko uruchomieniowe i wyświetlania informacji o całym zarządzanym kodzie działającym wewnątrz środowiska uruchomieniowego.

Aby użyć rozszerzenia debugowania SOS w programie Visual Studio, zainstaluj zestaw sterowników systemu Windows (WDK). Aby uzyskać informacje na temat zintegrowanego środowiska debugowania w programie Visual Studio, zobacz Debugowanie środowisk.

Można również użyć rozszerzenia debugowania SOS, ładując je do debugera WinDbg.exe i wykonując polecenia w WinDbg.exe.

Aby załadować rozszerzenie debugowania SOS do debugera WinDbg.exe, należy uruchomić następujące polecenie w narzędziu:

.loadby sos clr

WinDbg.exe i program Visual Studio używają wersji SOS.dll, która odpowiada aktualnie używanej wersji Mscorwks.dll. Domyślnie należy użyć wersji programu SOS.dll, który odpowiada aktualnej wersji Mscorwks.dll.

Aby użyć pliku zrzutu utworzonego na innym komputerze, należy upewnić się, że plik Mscorwks.dll dodany podczas instalacji znajduje się w ścieżce symbolu i załadować odpowiadającą wersję SOS.dll.

Aby załadować określoną wersję SOS.dll, należy wpisać następujące polecenie w debugerze systemu Windows:

.load <full path to sos.dll>

Przykłady

Następujące polecenie wyświetla zawartość tablicy pod adresem 00ad28d0. Wyświetlanie zaczyna się od drugiego elementu, a następnie wyświetlonych zostaje pięć kolejnych elementów.

!dumparray -start 2 -length 5 -detail 00ad28d0

Następujące polecenie wyświetla zawartość zestawu pod adresem 1ca248.

!dumpassembly 1ca248

Następujące polecenie wyświetla informacje o stercie modułu odśmiecania pamięci.

!dumpheap

Następujące polecenie zapisuje zawartość dziennika obciążenia pamięci do pliku (domyślnego) o nazwie StressLog.txt w bieżącym katalogu.

!DumpLog

Następujące polecenie wyświetla MethodDesc strukturę pod adresem 902f40.

!dumpmd 902f40

Następujące polecenie wyświetla informacje o module pod adresem 1caa50.

!dumpmodule 1caa50

Następujące polecenie wyświetla informacje o obiekcie pod adresem a79d40.

!DumpObj a79d40

Następujące polecenie wyświetla pola klasy wartości pod adresem 00a79d9c przy użyciu tabeli metod pod adresem 0090320c.

!DumpVC 0090320c 00a79d9c

Następujące polecenie wyświetla pamięć procesu używaną przez moduł odśmiecania pamięci.

!eeheap -gc

Następujące polecenie wyświetla wszystkie obiekty zaplanowane do finalizacji.

!finalizequeue

Następujące polecenie określa domenę aplikacji obiektu pod adresem 00a79d98.

!findappdomain 00a79d98

Następujące polecenie wyświetla wszystkie uchwyty modułu odśmiecania pamięci w bieżącym procesie.

!gcinfo 5b68dbb8

Następujące polecenie wyświetla MethodTable struktury i EEClass dla Main metody w klasie MainClass w module unittest.exe.

!name2ee unittest.exe MainClass.Main

Następujące polecenie wyświetla informacje o tokenie metadanych pod adresem 02000003 w module unittest.exe.

!token2ee unittest.exe 02000003

Zobacz też