SOS.dll (Rozszerzenie do debugowania SOS)

Rozszerzenie debugowania SOS (SOS.dll) ułatwia debugowanie zarządzanych programów w programie Visual Studio i w debugerze systemu Windows (WinDbg.exe), dostarczają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 z .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-clearpending breakpointnumber-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 pokazuje 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(wszystkie) 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 listę modelu apartamentów COM dla każdego wątku i Context wskaźnika, jeśli jest dostępny.
DumpArray [-start<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 .
DumpAssembly<adres zestawu> 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 .
DumpClass<Adres EEClass> Wyświetla informacje o EEClass strukturze skojarzonej z typem.

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

Użyj polecenia DumpMT, DumpObj, Name2EE lub Token2EE , aby uzyskać EEClass adres struktury.
DumpDomain [<adres> domeny] Wylicza każdy Assembly obiekt ł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>] [-typepartial 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 nadmierną fragmentację stert 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 większe niż size parametr określony w bajtach (szesnastkach).

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

Opcja -startAtLowerBound wymusza przejście stertą, aby rozpocząć od 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 spacer 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 znajduje się obecnie w wywołaniu metody 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 wyświetla tylko te obiekty, które odpowiadają określonej MethodTable strukturze.

Opcja -type wyświetla tylko te obiekty, których nazwa typu jest dopasowaniem podciągów określonego ciągu.

Parametr start rozpoczyna wyświetlanie listy z określonego adresu.

Parametr end zatrzymuje wyświetlanie listy pod określonym adresem.
ZrzutIL< Zarządzany obiekt >DynamicMethod | <Wskaźnik DynamicMethodDesc> | <Wskaźnik MethodDesc> Wyświetla język pośredni Microsoft (MSIL) skojarzony z zarządzaną metodą.

Należy zauważyć, że dynamiczny MSIL jest emitowany inaczej od MSIL, który jest ładowany z zestawu. Dynamiczny MSIL odnosi się do obiektów w tablicy obiektu zarządzanego, 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

-addr Opcjonalna opcja umożliwia określenie dziennika przeciążeń innego niż dziennik domyślny.
DumpMD<Adres 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.
Adres DumpMT [-MD] <MethodTable> 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><moduleaddr> Wyświetla informacje o MethodSig strukturze pod określonym adresem.
Adres modułuDumpModule [-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 obiektuDumpObj [-nofields] <>

-lub-

ZROBIĆ<adres obiektu>
Wyświetla informacje dotyczące obiektu pod podanym adresem. Polecenie DumpObj wyświetla pola, EEClass informacje o strukturze, tabelę metody i rozmiar obiektu.

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

Pamiętaj, że 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] [topstack [bottomstack]] 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 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ć polecenia DumpSigElem , aby odczytać prawidłowe części.
DumpStackObjects [-verify] [topstack [bottomstack]]

-lub-

DSO [-verify] [topstack [bottomstack]]
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.
DumpVC<Adres MethodTable><Adres> 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, które muszą zostać wyczyszczone, oraz o wszystkich SyncBlocksRuntimeCallableWrappers (RCW), 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”.
FindAppDomain<Adres obiektu> 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 -gen lub -gen dowolny wystąpił. W tym czasie debuggee jest w odpowiednim stanie dla FindRoots , aby zidentyfikować korzenie 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. W przypadku znalezienia dojścia polecenie GCHandleLeaks wyświetla adres odwołania. Jeśli uchwyt nie zostanie znaleziony w pamięci, polecenie wyświetli powiadomienie.
GCInfo<Adres MethodDesc><Adres kodu> 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ę dojścia do uchwytów 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 określono opcję -inclUnrooted , raport zawiera informacje o zarządzanych obiektach z stertą odzyskiwania pamięci, która nie jest już zakorzeniona.
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.
Obj_address>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<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.
IP2MD<Adres kodu> 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ą poprawne 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.
Name2EE<nazwa>< modułu nazwa typu lub metody>

-lub-

Name2EE<nazwa> modułu !<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, 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 w połączeniu z argumentem -stat , aby uzyskać szczegółowy widok typów, które są nadal zakorzenione. Za pomocą polecenia !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 [-nested] [<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świetla ostatni wyjątek zgłoszony w bieżącym wątku.

Opcja -nested wyświetla szczegóły dotyczące zagnieżdżonych obiektów wyjątków.

Opcja -lines wyświetla informacje o źródle, jeśli są dostępne.

To polecenie służy do formatowania i wyświetlania _stackTrace pola, 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<><Adres podstawowyPod nazwą> 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 pseudorejestracjiwyjątku><> Powoduje zatrzymanie debugera, gdy określony wyjątek zostanie zgłoszony, ale kontynuuje działanie, gdy zgłaszane są inne wyjątki.

Opcja pochodna przechwytuje określony wyjątek i każdy wyjątek pochodzący z określonego wyjątku.
SyncBlk [-all | <syncblk number>] 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.
Threadpool 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.
Token2EE<nazwa>< modułu Tokenu> 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 Wątki wyświetla skrócony identyfikator debugera, identyfikator wątku CLR i identyfikator wątku systemu operacyjnego. Ponadto w poleceniu Wątki 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 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.
ThreadState <Pole wartości stanu> 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
PrzechodzenieHeap [-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> Przedstawia 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świetla 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świetlenie 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 o zintegrowanym środowisku debugowania w programie Visual Studio, zobacz Debugowanie środowisk.

Możesz również użyć rozszerzenia debugowania SOS, ładując je do debugeraWinDbg.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

Poniższe polecenie wyświetla pola klasy wartości pod adresem 00a79d9c przy użyciu tabeli metody 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ż