Rozšíření ladění SOS

Rozšíření ladění SOS umožňuje zobrazit informace o kódu, který běží uvnitř modulu runtime .NET, a to jak v živých procesech, tak v výpisech paměti. Rozšíření je předinstalované s dotnet-dumpa Windbg/dbg a lze ho stáhnout pro použití s LLDB. Rozšíření ladění SOS můžete použít k:

  • Shromážděte informace o spravované haldě.
  • Hledejte poškození haldy.
  • Zobrazení interních datových typů používaných modulem runtime
  • Zobrazí informace o všech spravovaných kódech spuštěných uvnitř modulu runtime.

Syntaxe

Ve Windows: ![command] [options]

V Linuxu a macOS: sos [command] [options]

Mnoho příkazů obsahuje aliasy nebo klávesové zkratky v lldb: clrstack [options]

Příkazy

Následující tabulka příkazů je dostupná také v části Nápověda nebo soshelp. Individuální nápověda k příkazům je k dispozici pomocí soshelp <command>.

Příkaz Popis
bpmd [-nofuturemodule] [<název> metody názvu<>modulu] [-md<MethodDesc>] -list-clear< pending breakpoint number-clearall> Vytvoří ve zvoleném modulu zarážku u určené metody.

Pokud nebyl načten zvolený modul ani metoda, počká tento příkaz na notifikaci, že byl modul načten a zkompilován za běhu (JIT) před vytvořením zarážky.

Seznam čekajících zarážek můžete spravovat pomocí možností -list, -clear a -clearall :

Možnost -list vygeneruje seznam všech čekajících zarážek. Pokud má čekající zarážka nenulovou hodnotu ID modulu, pak je tato zarážka určena pro konkrétní funkci v konkrétním načteném modulu. Pokud má čekající zarážka nulovou hodnotu ID modulu, pak je tato zarážka určena modulům, které ještě nebyly načteny.

Pomocí možnosti -clear nebo -clearall odeberte nevyřízené zarážky ze seznamu.
CLRStack [-a] [-l] [-p] [-n] [-f] [-r] [-all] Poskytne trasování zásobníku pouze pro spravovaný kód.

Možnost -p zobrazuje argumenty spravované funkce.

Možnost -l zobrazuje informace o místních proměnných v rámci. Ladicí rozšíření SOS nemůže načíst místní názvy, takže výstup místních názvů je ve formátu <hodnoty místní adresy>=><.

Parametr -a je zkratka pro kombinaci -l a -p .

Možnost -n zakáže zobrazení názvů zdrojových souborů a čísel řádků. Pokud ladicí program má zadánu možnost SYMOPT_LOAD_LINES, bude nástroj SOS vyhledávat symboly pro každý spravovaný rámec a v případě úspěchu zobrazí odpovídající název zdrojového souboru a číslo řádku. Parametr -n (bez čísel řádků) lze zadat, aby se toto chování zakázalo.

Možnost -f (plný režim) zobrazuje nativní snímky, které je promíchají se spravovanými snímky, a s názvem sestavení a posunem funkce pro spravované rámce. Tato možnost nezobrazuje nativní rámce při použití s dotnet-dump.

Možnost -r vysadí registry pro každý rámec zásobníku.

Možnost -all vysadí všechny zásobníky spravovaných vláken.
COMState Vypíše model bytu modelu COM pro každé vlákno a Context ukazatel, pokud je k dispozici. Tento příkaz je podporován pouze ve Windows.
DumpArray [-start<startIndex>] [-length length<>] [-details] [-nofields] <adresa objektu pole>

nebo

DA [-start startIndex><] [-length length<>] [-details] [-nofields] adresa objektu pole>
Prozkoumá prvky objektu pole (typ array).

Možnost -start určuje počáteční index, ve kterém se mají zobrazit prvky.

Možnost -length určuje, kolik prvků se má zobrazit.

Možnost -details zobrazí podrobnosti o prvku pomocí dumpObj a dumpVC formátů.

Možnost -nofields zabraňuje zobrazení polí. Tato možnost je k dispozici pouze v případě, že je zadána možnost -details .
DumpAsync (dumpasync) [-mt<MethodTable Address>] [-type partial type type<name>] [-waiting] [-root] DumpAsync prochází haldu uvolňování paměti a hledá objekty představující asynchronní stavové počítače vytvořené při přenosu stavu asynchronní metody do haldy. Tento příkaz rozpozná asynchronní stavové počítače definované jako async void, async Task, async Task<T>async ValueTaska async ValueTask<T>.

Výstup obsahuje blok podrobností pro každý nalezený asynchronní objekt počítače se stavem. Mezi tyto podrobnosti patří:
- Řádek pro typ asynchronního objektu stavového počítače, včetně jeho MethodTable adresa, jeho adresa objektu, jeho velikost a název typu.
– Řádek pro název typu stavového počítače, jak je obsaženo v objektu.
- Výpis každého pole na stavovém počítači.
- Řádek pro pokračování z tohoto objektu stavového počítače, pokud byl zaregistrován jeden nebo více.
- Zjistil kořeny GC pro tento asynchronní stavový objekt počítače.
Adresa sestavení DumpAssembly<> Zobrazí informace o sestavení.

Příkaz DumpAssembly vypíše více modulů, pokud existují.

Adresu sestavení můžete získat pomocí příkazu DumpDomain .
Adresa DumpClass<EEClass> Zobrazí informace o EEClass struktuře přidružené k typu.

Příkaz DumpClass zobrazí statické hodnoty polí, ale nezobrazuje nestatické hodnoty polí.

K získání EEClass adresy struktury použijte příkaz DumpMT, DumpObj, Name2EE nebo Token2EE.
DumpDomain [<doménová adresa>] Vytvoří výčet každého Assembly objektu načteného v zadané AppDomain adrese objektu. Při zavolání bez parametrů vypíše příkaz DumpDomain všechny AppDomain objekty v procesu. Vzhledem k tomu, že .NET (Core) má pouze jeden AppDomain, DumpDomain vrátí pouze jeden objekt.
DumpHeap [-stat] [-strings] [-short] [-min<size] [-max<size>>] [-thinlock] [-startAtLowerBound] [-mt<MethodTable address>] [-type partial type<name>] [start [end]] Zobrazí informace o haldě uvolnění paměti a statistiky uvolňování objektů.

Příkaz DumpHeap zobrazí upozornění, pokud zjistí nadměrnou fragmentaci haldy uvolňování paměti.

Možnost -stat omezuje výstup na souhrn statistického typu.

Možnost -strings omezuje výstup na souhrn statistických řetězcových hodnot.

Parametr -short omezuje výstup pouze na adresu každého objektu. To umožňuje automatizovat snadným vytvořením kanálu pro výstup z příkazu do dalšího příkazu ladicího programu.

Možnost -min ignoruje objekty, které jsou menší než size parametr zadaný v bajtech.

Možnost -max ignoruje objekty, které jsou větší než size parametr zadaný v bajtech.

Možnost -thinlock hlásí ThinLocks. Další informace najdete v příkazu SyncBlk .

Možnost -startAtLowerBound vynutí chod haldy začít na dolním hranici zadaného rozsahu adres. Během fáze plánování často nelze haldu projít, jelikož je s objekty pohybováno. Tato možnost vynutí , aby DumpHeap začal chodit v zadané dolní hranici. Aby tato možnost fungovala, je třeba zadat adresu platného objektu jako dolní mez. Na adrese chybného objektu lze zobrazit paměť a vyhledat další tabulky metody ručně. Pokud je uvolňování paměti aktuálně ve volání memcopy, můžete být také schopni najít adresu dalšího objektu přidáním velikosti na počáteční adresu, která je zadána jako parametr.

Možnost -mt uvádí pouze ty objekty, které odpovídají zadané MethodTable struktuře.

Možnost -type uvádí pouze objekty, jejichž název typu je podřetězcem zadaného řetězce.

Parametr start začíná výpisem ze zadané adresy.

Parametr end zastaví výpis na zadané adrese.
Objekt DumpIL<Managed DynamicMethod | <>Ukazatel> DynamicMethodDesc | <Ukazatel MethodDesc> Zobrazí běžný zprostředkující jazyk (CIL), který je přidružený ke spravované metodě.

Dynamický soubor CIL se vygeneruje jinak než CIL načtený ze sestavení. Dynamický identifikátor CIL odkazuje na objekty ve spravovaném poli objektů, nikoli na tokeny metadat.
DumpLog [-addr<addressOfStressLog>] [<Název souboru>] Zapíše obsah zátěžového protokolu uloženého v paměti do zadaného souboru. Pokud nebude název zadán, vytvoří příkaz v aktuálním adresáři soubor s názvem StressLog.txt.

Zátěžový protokol uložený v paměti pomáhá diagnostikovat zátěžová selhání bez pomoci zámků nebo vstupů a výstupů. Pokud chcete povolit protokol zatížení, nastavte v části HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft následující klíče registru. Netframework:

(DWORD) StressLog = 1

(DWORD) LogFacility = 0xffffffff

(DWORD) StressLogSize = 65536

Volitelná -addr možnost umožňuje zadat jiný protokol zatížení než výchozí protokol.
Adresa DumpMD<MethodDesc> Zobrazí informace o MethodDesc struktuře na zadané adrese.

Pomocí příkazu IP2MD můžete získat MethodDesc adresu struktury ze spravované funkce.
Adresa metody DumpMT [-MD] <> Zobrazí informace o tabulce metod na zadané adrese. Zadáním možnosti -MD se zobrazí seznam všech metod definovaných s objektem.

Každý spravovaný objekt obsahuje ukazatel tabulky metod.
Adresa modulu DumpModule [-mt] <> Zobrazí informace o modulu na zadané adrese. Možnost -mt zobrazí typy definované v modulu a typy odkazované modulem.

Adresu modulu můžete načíst pomocí příkazu DumpDomain nebo DumpAssembly .
Adresa objektu DumpObj [-nofields] <>

nebo

Adresa objektu DO<>
Zobrazí informace o objektu na zadané adrese. Příkaz DumpObj zobrazí pole, EEClass informace o struktuře, tabulku metody a velikost objektu.

K načtení adresy objektu můžete použít příkaz DumpStackObjects .

Příkaz DumpObj můžete spustit u polí typuCLASS, protože jsou to také objekty.

Možnost -nofields zabraňuje zobrazení polí objektu, je užitečné pro objekty, jako je String.
DumpRuntimeTypes Zobrazí objekty typu runtime z haldy systému uvolňování paměti a vypíše názvy s nimi asociovaných typů a tabulky metod.
DumpStack [-EE] [-n] [topstack [bottomstack]] Zobrazí trasování zásobníku.

Možnost -EE způsobí, že příkaz DumpStack zobrazí pouze spravované funkce. top Pomocí parametrů můžete bottom omezit snímky zásobníku zobrazené na platformách x86.

Možnost -n zakáže zobrazení názvů zdrojových souborů a čísel řádků. Pokud ladicí program má zadánu možnost SYMOPT_LOAD_LINES, bude nástroj SOS vyhledávat symboly pro každý spravovaný rámec a v případě úspěchu zobrazí odpovídající název zdrojového souboru a číslo řádku. Parametr -n (bez čísel řádků) lze zadat, aby se toto chování zakázalo.
DumpSig sigaddr<>moduleaddr<> Zobrazí informace o Sig struktuře na zadané adrese.
DumpSigElem sigaddr<>moduleaddr<> Zobrazí jediný prvek objektu podpisu. Ve většině případů byste měli k zobrazení jednotlivých objektů podpisu použít DumpSig . Pokud je však podpis nějakým způsobem poškozen, můžete použít DumpSigElem ke čtení platných částí.
DumpStackObjects [-verify] [topstack [bottomstack]]

nebo

DSO [-verify] [topstack [bottomstack]]
Zobrazí všechny spravované objekty nalezené v rámci aktuálního zásobníku.

Možnost -verify ověří každé nestatické CLASS pole pole objektu.

Příkaz DumpStackObject použijte s příkazy trasování zásobníku, jako jsou K (windbg) nebo bt (lldb), spolu s příkazem clrstack určit hodnoty místních proměnných a parametrů.
Adresa<>metody DumpVC<> Zobrazí informace o polích třídy hodnot na konkrétní adrese.

Parametr MethodTable umožňuje příkazu DumpVC správně interpretovat pole. Třídy hodnot nemají jako první pole tabulku metod.
EEHeap [-gc] [-loader] Zobrazí informace o paměti procesu spotřebované interními datovými strukturami modulu runtime.

Možnosti -gc a -loader omezují výstup tohoto příkazu na datové struktury uvolňování paměti nebo zavaděče.

Informace pro systém uvolňování paměti obsahují rozsahy každého segmentu ve spravované haldě. Pokud ukazatel spadá do rozsahu segmentu zadaného parametrem -gc, je ukazatel ukazatelem objektu.
EEStack [-short] [-EE] Spustí příkaz DumpStack na všech vláknech procesu.

Možnost -EE se předá přímo příkazu DumpStack . Parametr -short omezuje výstup na následující typy vláken:

Vlákna, která byla uzamknuta.

Vlákna, která byla kvůli uvolňování paměti pozastavena.

Vlákna, která jsou aktuálně ve spravovaném kódu.
EHInfo [<Adresa> MethodDesc] [<Adresa kódu]> Zobrazí bloky zpracování výjimek v zadané metodě. Tento příkaz zobrazí adresy kódu a posuny bloku klauzule ( try blok) a blok obslužné rutiny ( catch blok).
Nejčastější dotazy Zobrazí nejčastější dotazy. Nepodporuje se v dotnet-dumpsouboru .
FinalizeQueue [-detail] | [-allReady] [-short] Zobrazí všechny objekty, které jsou registrovány pro dokončení.

Možnost -detail zobrazí další informace o všech SyncBlocks , které je potřeba vyčistit, a všechny RuntimeCallableWrappers rcWs, které čekají na vyčištění. Obě tyto datové struktury jsou uloženy do mezipaměti a vyčištěny finalizačním vláknem při spuštění.

Tato -allReady možnost zobrazí všechny objekty, které jsou připravené k dokončení, bez ohledu na to, zda jsou již označeny uvolňováním paměti, nebo budou označeny dalším uvolňováním paměti. Objekty, které jsou na seznamu objektů připravených k dokončení, jsou dokončitelné objekty, které již nezačínají kořenem. Tato možnost může být velice nákladná, jelikož ověřuje, zda všechny objekty ve frontě dokončitelných objektů stále začínají kořenem.

Možnost -short omezuje výstup na adresu každého objektu. Pokud se používá ve spojení s parametrem -allReady, vytvoří výčet všech objektů, které mají finalizační metodu, která již není rootována. Pokud je použita nezávisle, vypíše všechny objekty ve frontách s dokončitelnými objekty a objekty připravenými k dokončení.
Adresa objektu FindAppDomain<> Určuje doménu aplikace objektu na zadané adrese.
FindRoots-gen< N | >-gen any |<adresa objektu> Způsobí přerušení ladicího programu během ladění při dalším shromáždění zadané generace. Efekt se obnoví, jakmile dojde k přerušení. Pro přerušení dalšího shromažďování je třeba znovu zadat tento příkaz. Formulář <adresy> objektu tohoto příkazu se používá po přerušení způsobené -gen nebo -gen, došlo k jakékoli . V té době je ladicí program ve správném stavu pro FindRoots identifikovat kořeny pro objekty z aktuálních odsouzených generací. Podporuje se jenom ve Windows.
GCHandles [-perdomain] Zobrazí statistické údaje o popisovačích systému uvolňování paměti v procesu.

Možnost -perdomain uspořádá statistiky podle domény aplikace.

Pomocí příkazu GCHandles vyhledejte nevrácenou paměť způsobenou nevracením popisovače uvolňování paměti. Neuvolnění paměti například nastane, když kód zachová velké pole, protože silný popisovač systému uvolňování paměti na něj stále ukazuje, zatímco je zrušen, aniž by bylo uvolněno pole.

Podporuje se jenom ve Windows.
GCHandleLeaks Vyhledá v paměti jakékoli odkazy na silné a připojené popisovače systému uvolňování paměti v procesu a zobrazí výsledky. Pokud je nalezen popisovač, příkaz GCHandleLeaks zobrazí adresu odkazu. Pokud není popisovač v paměti nalezen, zobrazí tento příkaz upozornění. Podporuje se jenom ve Windows.
Adresa kódu adresy><GCInfo<MethodDesc> Zobrazí data, která označují, kdy registry nebo umístění zásobníku obsahují spravované objekty. Pokud dojde k uvolnění paměti, musí uvolňovač vědět o umístění odkazů na objekty, aby je bylo možné aktualizovat novou hodnotou ukazatele na objekt.
Adresa objektu GCRoot [-nostacks] [-all] <> Zobrazí informace o odkazech (nebo kořenech) na objekt na zadané adrese.

Příkaz GCRoot prozkoumá celou spravovanou haldu a tabulku popisovačů pro popisovače v jiných objektech a popisovačích v zásobníku. Každý zásobník následně vyhledá ukazatele na objekty a rovněž je prohledána fronta finalizační metody.

Tento příkaz neurčuje, zda je kořen zásobníku platný nebo zrušený. Pomocí příkazů clrstack a U přeložte rámec, do kterého patří místní hodnota nebo hodnota argumentu, abyste zjistili, jestli je kořen zásobníku stále používán.

Možnost -nostacks omezuje vyhledávání na popisovače uvolňování paměti a dosažitelné objekty.

Možnost -all vynutí, aby se všechny kořeny zobrazovaly místo jen jedinečných kořenových.
Adresa objektu GCWhere<> Zobrazí umístění a velikost předaného argumentu v haldě uvolňování paměti. Pokud argument leží ve spravované haldě, ale není platnou adresou objektu, je zobrazena velikost 0 (nula).
Nápověda (soshelp) [<command>] [faq] Zobrazí všechny dostupné příkazy, pokud není zadán žádný parametr, nebo zobrazí detailní informace nápovědy o zadaném příkazu.

Parametr faq zobrazuje odpovědi na nejčastější dotazy.
HeapStat [-inclUnrooted-iu | ] Zobrazí velikosti generací pro každou haldu a celkové volné místo v každé generaci v každé haldě. Pokud je zadána možnost -inclUnrooted , sestava obsahuje informace o spravovaných objektech z haldy uvolňování paměti, která již není rootována. Podporuje se jenom ve Windows.
HistClear Uvolní všechny prostředky používané sadou Hist příkazů.

Obecně platí, že nemusíte explicitně volat HistClear, protože každý HistInit z nich vyčistí předchozí prostředky.
HistInit Inicializuje struktury SOS ze zátěžového protokolu uloženého v laděné položce.
HistObj<obj_address> Zkontroluje všechny záznamy přemístění zátěžového protokolu a zobrazí řetězec přemísťování uvolňování paměti, který může vést na adresu předanou jako argument.
HistObjFind<obj_address> Zobrazí všechny položky protokolu, které odkazují na objekt na zadané adrese.
Kořen HistRoot<> Zobrazí informace týkající se propagace a přemístění zadaného kořenu.

Hodnotu kořenu lze použít ke sledování pohybu objektu skrz uvolňování paměti.
Adresa kódu IP2MD (ip2md) <> MethodDesc Zobrazí strukturu na zadané adrese v kódu, který byl zkompilován JIT.
ListNearObj (lno) <obj_address> Zobrazí objekty před a za zadanou adresou. Tento příkaz vyhledá adresu v haldě uvolňování paměti vypadající jako platný začátek spravovaného objektu (podle platné tabulky metod) a objekt následující za adresou argumentu. Podporuje se jenom ve Windows.
MinidumpMode [0] [1] Zabrání ve spuštění nebezpečných příkazů pomocí minimálního výpisu.

Pokud chcete tuto funkci zakázat, předejte 0 , nebo 1 tuto funkci povolíte. Ve výchozím nastavení je hodnota MinidumpMode nastavena na hodnotu 0.

Minidumps vytvořené pomocí příkazu .dump /m nebo příkazu .dump mají omezená data specifická pro CLR a umožňují správně spouštět pouze podmnožinu příkazů SOS. Některé příkazy mohou selhat s neočekávanými chybami, jelikož požadované oblasti paměti nejsou zmapovány nebo jsou zmapovány pouze částečně. Tato možnost zabraňuje ve spuštění nebezpečných příkazů s minimálním výpisem.

Podporuje se pouze u aplikace Windbg.
Název modulu><Name2EE (name2ee) <– typ nebo název metody>

nebo

Název> modulu Name2EE!<<název typu nebo metody>
MethodTable Zobrazí strukturu a EEClass strukturu pro zadaný typ nebo metodu v zadaném modulu.

Zadaný modul musí být načten v procesu.

Pokud chcete získat správný název typu, projděte modul pomocí Ildasm.exe (IL Disassembler). Jako parametr názvu modulu můžete také předat * vyhledávání všech načtených spravovaných modulů. Parametr názvu modulu může být také názvem ladicího programu pro modul, například mscorlib nebo image00400000.

Tento příkaz podporuje syntaxi <<>module>!typeladicího programu systému Windows . Typ musí být plně kvalifikovaný.
ObjSize [<Adresa> objektu] | [-aggregate] [-stat] Zobrazí velikost zadaného objektu. Pokud nezadáte žádné parametry, zobrazí příkaz ObjSize velikost všech objektů nalezených ve spravovaných vláknech, zobrazí všechny popisovače uvolňování paměti v procesu a součet velikosti všech objektů odkazovaných těmito popisovači. Příkaz ObjSize obsahuje kromě nadřazeného objektu také velikost všech podřízených objektů.

Možnost -aggregate lze použít ve spojení s argumentem -stat k získání podrobného zobrazení typů, které jsou stále rootovány. Pomocí !dumpheap -stat a !objsize -aggregate -stat můžete určit, které objekty už nejsou rootovány, a diagnostikovat různé problémy s pamětí.

Podporuje se jenom ve Windows.
PrintException [-nested] [-lines] [<Adresa> objektu výjimky]

nebo

PE [-vnořená] [<Adresa> objektu výjimky]
Zobrazí a formátuje pole libovolného objektu Exception odvozeného z třídy na zadané adrese. Pokud nezadáte adresu, zobrazí příkaz PrintException poslední výjimku vyvolanou v aktuálním vlákně.

Možnost -vnořená zobrazí podrobnosti o vnořených objektech výjimek.

Možnost -lines zobrazí informace o zdroji, pokud jsou k dispozici.

Tento příkaz můžete použít k formátování a zobrazení _stackTrace pole, což je binární pole.
ProcInfo [-env] [-time] [-mem] Zobrazí proměnné prostředí pro proces, čas jádra CPU a statistiky využití paměti. Podporuje se pouze u aplikace Windbg.
Adresa RCWCleanupList<RCWCleanupList> Zobrazí seznam obálek volatelných za běhu (RCW), které čekají na vyčištění, na zadané adrese. Podporuje se pouze u aplikace Windbg.
Název souboru základní adresy<>SaveModule<> Zapíše bitovou kopii, která je načtena do paměti na zadané adrese, do zadaného souboru. Podporuje se pouze u aplikace Windbg.
SetHostRuntime [<runtime-directory>] Tento příkaz nastaví cestu k modulu runtime .NET, který se použije k hostování spravovaného kódu, který běží jako součást SOS v ladicím programu (lldb). Modul runtime musí mít alespoň verzi 2.1.0 nebo vyšší. Pokud jsou v adresáři mezery, musí být s jednoduchými uvozenkami (').

Za normálních okolností se SOS pokusí najít nainstalovaný modul runtime .NET pro automatické spuštění spravovaného kódu, ale tento příkaz je k dispozici, pokud selže. Ve výchozím nastavení se používá stejný modul runtime (libcoreclr), který se ladí. Tento příkaz použijte, pokud výchozí laděný modul runtime nefunguje dostatečně ke spuštění kódu SOS nebo pokud je verze menší než 2.1.0.

Pokud se při spuštění příkazu SOS zobrazila následující chybová zpráva, použijte tento příkaz k nastavení cesty na 2.1.0 nebo vyšší modul runtime .NET.

(lldb) clrstack
Error: Fail to initialize CoreCLR 80004005 ClrStack failed

(lldb) sethostruntime /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.6

Pomocí příkazu dotnet --info v příkazovém prostředí můžete najít cestu nainstalovaného modulu runtime .NET.
SetSymbolServer [-ms] [-disable] [-log] [-loadsymbols] [-cache<cache cache-path>] [-directory<search-directory>] [-sympath<windows-symbol-path>] [<symbol-server-URL]> Povolí podporu stahování serveru symbolů.

Možnost -ms umožňuje stahování z veřejného serveru symbolů Microsoftu.

Možnost -disable zapne podporu stahování symbolů.

Možnost cesta k mezipaměti -cache>< určuje adresář mezipaměti symbolů. Výchozí hodnota je $HOME/.dotnet/symbolcache, pokud není zadána.

Možnost -directory přidá cestu k hledání symbolů. Může to být víc než jedna.

Možnost -soustrast přidá cesty k serveru, mezipaměti a adresáři ve formátu cesty symbolu Windows.

Možnost -log povolí protokolování stahování symbolů.

Možnost -loadsymbols se pokusí stáhnout nativní symboly .NET pro modul runtime. Podporováno v lldb a dotnet-dump.
SOSFlush Vyprázdní interní mezipaměť SOS.
SOSStatus [-reset] Zobrazí interní stav SOS nebo resetuje stav interní mezipaměti.
StopOnException [-derived] [-create-create2 | ] <Exception><Pseudo-register number> Způsobí, že se ladicí program zastaví, pokud je vyvolána zadaná výjimka, ale bude pokračovat, pokud je vyvolána jiná výjimka.

Možnost odvozená odvozuje zadanou výjimku a každou výjimku, která je odvozena od zadané výjimky.

Podporuje se pouze u aplikace Windbg.
SyncBlk [-all | <syncblk number>] Zobrazí zadanou SyncBlock strukturu nebo všechny SyncBlock struktury. Pokud nepředáte žádné argumenty, příkaz SyncBlk zobrazí SyncBlock strukturu odpovídající objektům, které vlastní vlákno.

Struktura SyncBlock je kontejner pro další informace, které nemusí být vytvořeny pro každý objekt. Může obsahovat data zprostředkovatele komunikace s objekty COM, hodnoty hash a informace o zamykání pro operace bezpečné pro přístup z více vláken.
Threadpool Zobrazí informace o spravovaném fondu vláken, včetně počtu pracovních požadavků ve frontě, počtu vláken portů dokončení a počtu časovačů.
Vlákna (clrthreads) [-live] [-special] Zobrazí všechna spravovaná vlákna v procesu.

Příkaz Vlákna zobrazí zkrácené ID ladicího programu, ID vlákna CLR a ID vlákna operačního systému. Příkaz Vlákna navíc zobrazí sloupec Doména, který označuje doménu aplikace, ve které se spouští vlákno, sloupec APT, který zobrazuje režim bytu modelu COM, a sloupec Výjimky, který zobrazuje poslední výjimku vyvolanou ve vlákně.

Možnost -live zobrazí vlákna přidružená k živému vláknu.

Možnost -special zobrazí všechna speciální vlákna vytvořená clR. Speciální vlákna zahrnují vlákna uvolňování paměti (v souběžných a serverových uvolňování paměti), pomocné vlákna ladicího programu, finalizační vlákna, AppDomain uvolnit vlákna a vlákna časovače fondu vláken.
Pole State State ThreadState <> Zobrazí stav vlákna. Parametr value je hodnota State pole ve výstupu sestavy Threads .
Token s názvem<>modulu Token2EE<> Změní zadaný token metadat v zadaném modulu na MethodTable strukturu nebo MethodDesc strukturu.

Parametr názvu modulu můžete předat * , abyste zjistili, na co se tento token mapuje v každém načteném spravovaném modulu. Můžete také předat název ladicího programu pro modul, například mscorlib nebo image00400000.
U [-gcinfo] [-ehinfo] [-n]< Adresa> MethodDesc | <Adresa kódu> Zobrazí překlad poznámek spravované metody určené ukazatelem MethodDesc struktury metody nebo adresou kódu v těle metody. Příkaz U zobrazí celou metodu od začátku do konce s poznámkami, které převádějí tokeny metadat na názvy.

Parametr -gcinfo způsobí, že příkaz U zobrazí GCInfo strukturu pro metodu.

Možnost -ehinfo zobrazí informace o výjimce pro metodu. Tyto informace můžete získat také pomocí příkazu EHInfo .

Možnost -n zakáže zobrazení názvů zdrojových souborů a čísel řádků. Pokud má ladicí program zadánu možnost SYMOPT_LOAD_LINES, bude nástroj SOS vyhledávat symboly pro každý spravovaný rámec a v případě úspěchu zobrazí odpovídající název zdrojového souboru a číslo řádku. Toto chování můžete zakázat zadáním parametru -n .
VerifyHeap Zkontroluje, zda halda systému uvolňování paměti vykazuje známky poškození a zobrazí všechny nalezené chyby.

Poškození haldy může být způsobeno voláními vyvolání platformy, která nejsou správně vytvořena.
Adresa objektu VerifyObj<> Zkontroluje, zda objekt, který je předán jako argument, jeví známky poškození. Podporuje se jenom ve Windows.
Vmmap Projde prostor virtuálních adres a zobrazí typy ochran aplikované na jednotlivé oblasti. Podporuje se pouze u aplikace Windbg.
VMStat Poskytuje souhrnné zobrazení prostoru virtuálních adres, seřazených podle typů ochran aplikovaných na danou paměť (volná, rezervovaná, potvrzená, soukromá, mapovaná, bitová kopie). Sloupec TOTAL obsahuje hodnotu ze sloupce AVERAGE vynásobenou hodnotou ze sloupce BLK COUNT. Podporuje se pouze u aplikace Windbg.

Dotnet-Dump

Seznam dostupných příkazů SOS se seznamem dotnet-dump analyzepříkazů dotnet-dump.

Ladicí program systému Windows

Rozšíření ladění SOS můžete použít také tak, že ho načtete do ladicího programu WinDbg/dbg a spustíte příkazy v ladicím programu systému Windows. Příkazy SOS je možné použít pro živé procesy nebo výpisy paměti.

Aplikace Windbg by měla načíst rozšíření SOS automaticky pokaždé, když laděný proces obsahuje modul runtime .NET (coreclr.dll nebo libcoreclr.so).

Ladicí program LLDB

Pokyny ke konfiguraci SOS pro LLDB najdete v tématu dotnet-sos. Příkazy SOS je možné použít pro živé procesy nebo výpisy paměti.

Ve výchozím nastavení se můžete dostat ke všem příkazům SOS zadáním: sos [command_name]. Běžné příkazy jsou ale aliasované, takže předponu sos nepotřebujete:

Příkaz Function
analyzeoom Zobrazí informace o posledním objektu OOM, ke kterému došlo v žádosti o přidělení haldy GC.
bpmd Vytvoří zarážku na zadané spravované metodě v zadaném modulu.
clrmodules Zobrazí seznam spravovaných modulů v procesu.
clrstack Poskytne trasování zásobníku pouze pro spravovaný kód.
clrthreads Zobrazí seznam spravovaných vláken, která jsou spuštěná.
clru Zobrazí anotovaný překlad spravované metody.
dbgout Povolí nebo zakáže (-off) interní protokolování SOS.
dso Zobrazí všechny spravované objekty nalezené v rámci aktuálního zásobníku.
dumpalc Zobrazí podrobnosti o collectible AssemblyLoadContext, do kterého je zadaný objekt načten.
dumparray Zobrazí podrobnosti o spravovaném poli.
dumpasync Zobrazí informace o asynchronních stavových počítačích na haldě s uvolňováním paměti.
dumpassembly Zobrazí podrobnosti o sestavení.
dumpclass Zobrazí informace o struktuře EEClass na zadané adrese.
dumpconcurrentdictionary Zobrazí souběžný obsah slovníku.
dumpconcurrentqueue Zobrazí souběžný obsah fronty.
dumpdelegate Zobrazí informace o delegátu.
dumpdomain Zobrazí informace o všech sestaveních ve všech doménách AppDomains nebo zadaném sestavení.
dumpgcdata Zobrazí informace o datech GC.
dumpgen Zobrazí obsah haldy pro zadanou generaci.
dumpheap Zobrazí informace o statistikách haldy a shromažďování paměti o objektech.
dumpil Zobrazí běžný zprostředkující jazyk (CIL), který je přidružený ke spravované metodě.
dumplog Zapíše obsah zátěžového protokolu uloženého v paměti do zadaného souboru.
dumpmd Zobrazí informace o struktuře MethodDesc na zadané adrese.
dumpmodule Zobrazí informace o modulu na zadané adrese.
dumpmt Zobrazí informace o tabulce metod na zadané adrese.
dumpobj Zobrazí informace o objektu na zadané adrese.
dumpruntimetypes Vyhledá všechny objekty System.RuntimeType v haldě GC a vytiskne také název typu a MethodTable, které odkazují.
dumpsig Vypisuje podpis metody nebo pole určeného parametrem <sigaddr> <moduleaddr>.
dumpsigelem Vypisuje jeden prvek objektu podpisu.
dumpstack Zobrazí nativní a spravované trasování zásobníku.
dumpstackobjects Zobrazí všechny spravované objekty nalezené v rámci aktuálního zásobníku.
dumpvc Zobrazí informace o polích třídy hodnot.
eeheap Zobrazí informace o paměti procesu spotřebované interními datovými strukturami modulu runtime.
eestack Spouští dumpstack se na všech vláknech v procesu.
eeversion Zobrazí informace o modulech runtime a verzích SOS.
ehinfo Zobrazí bloky zpracování výjimek v metodě jit-ed.
finalizequeue Zobrazí všechny objekty, které jsou registrovány pro dokončení.
findappdomain Pokusí se přeložit AppDomain objektu GC.
findroots Vyhledá a zobrazí kořeny objektů napříč kolekcemi uvolňování paměti.
gchandles Zobrazí statistické údaje o popisovačích systému uvolňování paměti v procesu.
gcheapstat Zobrazí statistiku o uvolňování paměti.
gcinfo Zobrazí kódování GC JIT pro metodu.
gcroot Zobrazí informace o odkazech (nebo kořenech) objektu na zadané adrese.
gcwhere Zobrazí umístění v haldě GC zadané adresy.
histclear Uvolní všechny prostředky používané rodinou příkazů Hist.
histinit Inicializuje struktury SOS ze zátěžového protokolu uloženého v laděné položce.
histobj Zkontroluje všechny záznamy přemístění zátěžového protokolu a zobrazí řetězec přemísťování uvolňování paměti, který může vést na adresu předanou jako argument.
histobjfind Zobrazí všechny položky protokolu, které odkazují na objekt na zadané adrese.
histroot Zobrazí informace týkající se propagace a přemístění zadaného kořenu.
histstats Zobrazí statistiky protokolu napětí.
ip2md MethodDesc Zobrazí strukturu na zadané adrese v kódu, který byl zkompilován JIT.
listnearobj Zobrazí objekt, který předchází zadané adrese a bude úspěšný.
loadsymbols Načte symboly nativního modulu .NET.
logging Povolí nebo zakáže interní protokolování SOS.
name2ee MethodTable Zobrazí a EEClass struktury pro zadaný typ nebo metodu v zadaném modulu.
objsize Zobrazí velikost zadaného objektu.
parallelstacks Zobrazí zásobník sloučených vláken podobně jako na panelu Paralelní zásobníky sady Visual Studio.
pathto Zobrazí cestu GC od <root> do <target>.
pe Zobrazí a formátuje pole libovolného objektu Exception odvozeného z třídy na zadané adrese.
printexception Zobrazí a formátuje pole libovolného objektu Exception odvozeného z třídy na zadané adrese.
runtimes Zobrazí seznam modulů runtime v cíli nebo změnu výchozího modulu runtime.
stoponcatch Cílový proces přeruší při příštím zachycení spravované výjimky během provádění.
setclrpath Nastaví cestu pro načtení souborů dac/dbi coreclr. setclrpath <path>.
sethostruntime Nastaví nebo zobrazí adresář modulu runtime .NET, který se použije ke spuštění spravovaného kódu v SOS.
setsymbolserver Povolí podporu serveru symbolů.
setsostid Nastaví aktuální index vázaného na operační systém nebo vlákno místo toho, aby používal ten, který lldb poskytuje. setsostid <tid> <index>.
sos Spustí různé příkazy ladění coreclr. Použijte syntaxi sos <command-name> <args>. Další informace najdete v tématu "soshelp".
soshelp Zobrazí všechny dostupné příkazy, pokud není zadán žádný parametr, nebo zobrazí podrobné informace nápovědy o zadaném příkazu: soshelp <command>.
syncblk Zobrazí informace o držiteli syncblocku.
taskstate Zobrazí stav úkolu v čitelném formátu člověka.
threadpool Zobrazí informace o fondu vláken modulu runtime.
threadpoolqueue Zobrazí pracovní položky fondu vláken ve frontě.
threadstate Docela vytiskne význam stavu vláken.
timerinfo Zobrazí informace o spuštěných časovačích.
token2ee Zobrazí strukturu MethodTable a strukturu MethodDesc pro zadaný token a modul.
traverseheap Zapíše informace haldy do souboru ve formátu, kterému rozumí profiler CLR.
verifyheap Zkontroluje známky poškození haldy GC.
verifyobj Zkontroluje, zda objekt, který je předán jako argument, jeví známky poškození.

Příklad použití windbg/cdb

Příkaz Popis
!dumparray -start 2 -length 5 -details 00ad28d0 Zobrazí obsah pole na adrese 00ad28d0. Zobrazí se druhý prvek a pět následujících.
!dumpassembly 1ca248 Zobrazí obsah sestavení na adrese 1ca248.
!dumpheap Zobrazí informace o haldě uvolňování paměti.
!DumpLog Zapíše obsah protokolu zatížení v paměti do (výchozího) souboru s názvem StressLog.txt v aktuálním adresáři.
!dumpmd 902f40 MethodDesc Zobrazí strukturu na adrese 902f40.
!dumpmodule 1caa50 Zobrazí informace o modulu na adrese 1caa50.
!DumpObj a79d40 Zobrazí informace o objektu na adrese a79d40.
!DumpVC 0090320c 00a79d9c Zobrazí pole třídy hodnot na adrese 00a79d9c pomocí tabulky metod na adrese 0090320c.
!eeheap -Gc Zobrazí paměť procesu používanou uvolňováním paměti paměti.
!finalizequeue Zobrazí všechny objekty naplánované pro dokončení.
!findappdomain 00a79d98 Určuje doménu aplikace objektu na adrese 00a79d98.
!gcinfo 5b68dbb8 Zobrazí všechny popisovače uvolňování paměti v aktuálním procesu.
!name2ee unittest.exe MainClass.Main Zobrazí a EEClass struktury pro metodu Main ve třídě MainClass v modulu unittest.exe.MethodTable
!token2ee unittest.exe 02000003 Zobrazí informace o tokenu metadat na adrese 02000003 v modulu unittest.exe.

Příklad využití LLDB

Příkaz Popis
dumparray -start 2 -length 5 -details 00ad28d0 Zobrazí obsah pole na adrese 00ad28d0. Zobrazí se druhý prvek a pět následujících.
dumpassembly 1ca248 Zobrazí obsah sestavení na adrese 1ca248.
dumpheap Zobrazí informace o haldě uvolňování paměti.
dumplog Zapíše obsah protokolu zatížení v paměti do (výchozího) souboru s názvem StressLog.txt v aktuálním adresáři.
dumpmd 902f40 MethodDesc Zobrazí strukturu na adrese 902f40.
dumpmodule 1caa50 Zobrazí informace o modulu na adrese 1caa50.
dumpobj a79d40 Zobrazí informace o objektu na adrese a79d40.
dumpvc 0090320c 00a79d9c Zobrazí pole třídy hodnot na adrese 00a79d9c pomocí tabulky metod na adrese 0090320c.
eeheap -gc Zobrazí paměť procesu používanou uvolňováním paměti paměti.
findappdomain 00a79d98 Určuje doménu aplikace objektu na adrese 00a79d98.
gcinfo 5b68dbb8 Zobrazí všechny popisovače uvolňování paměti v aktuálním procesu.
name2ee unittest.exe MainClass.Main Zobrazí a EEClass struktury pro metodu Main ve třídě MainClass v modulu unittest.exe.MethodTable
token2ee unittest.exe 02000003 Zobrazí informace o tokenu metadat na adrese 02000003 v modulu unittest.exe.
clrthreads Zobrazí spravovaná vlákna.

Viz také