Rozšíření ladicího programu .NET
Rozšíření ladicího programu .NET umožňují zobrazit informace o kódu spuštěném uvnitř modulu runtime .NET v živých procesech i výpisech. Rozšíření jsou předinstalovaná s Windbga lze je stáhnout pro použití s LLDB. Rozšíření ladicího programu .NET 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.
Rozšíření ladicího programu .NET zahrnují příkazy z existujícího nástroje dotnet-sos i nových příkazů. Nativní modul runtime AOT teď podporuje také omezenou sadu příkazů.
Syntax
Pod větrem: ![command] [options]
V části LLDB: sos [command] [options]
Mnoho příkazů má aliasy nebo klávesové zkratky v LLDB: clrstack [options]
Příkazy
Následující tabulka příkazů je také k dispozici v části Nápověda nebo soshelp. Nápověda k jednotlivým příkazům je k dispozici pomocí soshelp <command>
.
Příkaz | Popis |
---|---|
Vytvoří zarážku v zadané metodě v zadaném modulu. Pokud zadaný modul a metoda nebyly načteny, tento příkaz čeká na oznámení, že modul byl načten a zkompilován za běhu (JIT) před vytvořením zarážky. Seznam nevyřízených zarážek můžete spravovat pomocí možností -list, -cleara -clearall: Možnost -list vygeneruje seznam všech čekajících zarážek. Pokud má čekající zarážka nenulové ID modulu, je tato zarážka specifická pro funkci v daném načteném modulu. Pokud má čekající zarážka nulové ID modulu, použije se tato zarážka na moduly, které ještě nebyly načteny. Pomocí možnosti -clear nebo -clearall odebrat nevyřízené zarážky ze seznamu. |
|
CLRStack [-a] [-l] [-p] [-n] [-f] [-r] [-all] | Poskytuje trasování zásobníku pouze spravovaného kódu. Možnost -p zobrazuje argumenty spravované funkce. Možnost -l zobrazuje informace o místních proměnných v rámci. Rozšíření ladicího programu .NET nemohou načíst místní názvy, takže výstup místních názvů je ve formátu <místní adresa>=<hodnotu>. Možnost -a je zkratka pro kombinaci -l a - p. Možnost -n zakáže zobrazení názvů zdrojových souborů a čísel řádků. Pokud má ladicí program možnost SYMOPT_LOAD_LINES zadaný, SOS vyhledá 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é se 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 vynechá zásobníky všech spravovaných vláken. |
COMState | Vypíše model apartmánu MODELU COM pro každé vlákno a ukazatel Context , pokud je k dispozici. Tento příkaz je podporován pouze ve Windows. |
dumpArray [-start<startIndex>] [-length<délka>] [-details] [-nofields] <adresa objektu pole> -nebo- DA [-start<startIndex>] [-length<délka>] [-details] [-nofields] adresa objektu pole> |
Prozkoumá prvky objektu pole. 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 Možnost -nofields zabraňuje zobrazení polí. Tato možnost je dostupná pouze v případě, že je zadána možnost -details. |
dumpAsync (dumpasync) [-mt<MethodTable address>] [-type<částečný název typu>] [-waiting] [-root] | DumpAsync prochází haldu s uvolňováním 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 ValueTask a 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. Podporováno pro nativní aplikace AOT. |
Zobrazí informace o sestavení. Příkaz DumpAssembly vypíše více modulů, pokud existují. Adresu sestavení můžete získat pomocí příkazu DumpDomain. |
|
Zobrazí informace o EEClass struktuře přidružené k typu.Příkaz DumpClass zobrazuje statické hodnoty polí, ale nezobrazuje nestatické hodnoty polí. Pomocí |
|
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ů zobrazí příkaz DumpDomain seznam všech objektů AppDomain v procesu. Vzhledem k tomu, že .NET (Core) má pouze jeden AppDomain, DumpDomain vrátí pouze jeden objekt. |
DumpHeap [-stat] [-strings] [-short] [-min<velikost>] [-max<velikost>] [-thinlock] [-startAtLowerBound] [-mt<MethodTable address>] [-type<částečný název typu>] [začátek [end]] | Zobrazí informace o haldě a statistikách shromažďování paměti o objektech. 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 hodnot řetězce. Možnost -short omezuje výstup pouze na adresu každého objektu. Tento příkaz umožňuje snadno převést výstup z příkazu do jiného příkazu ladicího programu pro automatizaci. Možnost -min ignoruje objekty, které jsou menší než parametr size zadaný v bajtech.Možnost -max ignoruje objekty, které jsou větší než parametr size zadaný v bajtech.Možnost -thinlock hlásí ThinLocks. Další informace najdete v příkazu SyncBlk. Možnost -startAtLowerBound vynutí chod haldy, aby začala na dolním hranici zadaného rozsahu adres. Během fáze plánování není halda často procházitelná, protože se přesunují objekty. Tato možnost vynutí DumpHeap zahájit svou procházku v zadané dolní hranici. Aby tato možnost fungovala, je nutné zadat adresu platného objektu jako dolní mez. Paměť můžete zobrazit na adrese špatného objektu a ručně najít další tabulku metody. Pokud je uvolňování paměti aktuálně ve volání memcopy , můžete také zjistit adresu dalšího objektu přidáním velikosti na počáteční adresu, která je zadána jako parametr.Možnost -mt obsahuje pouze ty objekty, které odpovídají zadané struktuře MethodTable .Možnost -type uvádí pouze ty 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.Podporováno pro nativní aplikace AOT. |
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. |
|
dumplock [--allthreads] [--waits] | Zobrazí informace o objektech System.Threading.Lock, jako jsou vlákna (výchozí) nebo objekty, na které čekají vlákna. |
DumpLog [-addr<addressOfStressLog>] [<Název souboru>] | Zapíše obsah protokolu zatížení v paměti do zadaného souboru. Pokud nezadáte název, tento příkaz vytvoří soubor s názvem StressLog.txt v aktuálním adresáři. Protokol zatížení v paměti pomáhá diagnostikovat selhání stresu bez použití zámků nebo vstupně-výstupních operací. Pokud chcete povolit protokol napětí, nastavte v části HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFrameworknásledující klíče registru: (DWORD) StressLog = 1 (DWORD) LogFacility = 0xffffffff (DWORD) StressLogSize = 65536 Volitelná možnost -addr umožňuje zadat jiný protokol zatížení než výchozí protokol.Podporováno pro nativní aplikace AOT. |
Zobrazí informace o MethodDesc struktuře na zadané adrese.Pomocí příkazu IP2MD můžete získat adresu struktury MethodDesc ze spravované funkce. |
|
DumpMT [-MD] <adresa methodtable> | Zobrazí informace o tabulce metod na zadané adrese. Zadáním možnosti -MD zobrazíte seznam všech metod definovaných objektem. Každý spravovaný objekt obsahuje ukazatel tabulky metody. |
|
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. |
DumpObj [-nofields] <adresa objektu> -nebo- < adresa objektu> |
Zobrazí informace o objektu na zadané adrese. Příkaz DumpObj zobrazí pole, informace o struktuře EEClass , 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í typu CLASS , 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 modulu runtime v haldě uvolňování paměti a zobrazí jejich přidružené názvy typů a tabulky metod. |
dumpStack [-EE] [-n] [top zásobník [bottom zásobník]] |
Zobrazí trasování zásobníku. Možnost -EE způsobí, že příkaz DumpStack zobrazí pouze spravované funkce. Pomocí parametrů top a bottom omezte rámce zásobníku zobrazené na platformách x86.Možnost -n zakáže zobrazení názvů zdrojových souborů a čísel řádků. Pokud má ladicí program možnost SYMOPT_LOAD_LINES zadána, SOS vyhledá 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í jeden prvek objektu podpisu. Ve většině případů byste k zobrazení jednotlivých objektů podpisu měli použít DumpSig. Pokud je však podpis nějakým způsobem poškozen, můžete k přečtení platných částí použít DumpSigElem. |
DumpStackObjects [-verify] [top stack [bottom stack]]-nebo- DSO [-verify] [ top stack [bottom stack]] |
Zobrazí všechny spravované objekty nalezené v mezích aktuálního zásobníku. Možnost -verify ověří všechna nestatická CLASS pole pole objektu.Příkaz DumpStackObject 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 |
Zobrazí informace o polích třídy hodnot na zadané adrese. Parametr MethodTable umožňuje DumpVC příkaz 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 uvádějí rozsahy jednotlivých segmentů ve spravované haldě. Pokud ukazatel spadá do oblasti segmentů dané -gc, ukazatel je ukazatel objektu. |
EEStack [-short] [-EE] | Spustí příkaz DumpStack ve 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á převzala zámek. Vlákna, která byla zastavena, aby bylo možné uvolňování paměti. Vlákna, která jsou aktuálně ve spravovaném kódu. |
Zobrazí bloky zpracování výjimek v zadané metodě. Tento příkaz zobrazí adresy kódu a posuny bloku klauzule (blok try ) a blok obslužné rutiny (blok catch ). |
|
nejčastější dotazy k |
Zobrazuje nejčastější dotazy. V dotnet-dump se nepodporuje . |
FinalizeQueue [-detail] | [-allReady] [-short] | Zobrazí všechny objekty registrované k 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í.Možnost -allReady 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 v seznamu připraveno k dokončení, jsou finalizovatelné objekty, které již nejsou rootovány. Tato možnost může být nákladná, protože ověřuje, jestli jsou všechny objekty ve finalizovatelných frontách stále kořenové.Možnost -short omezuje výstup na adresu každého objektu. Pokud se používá s -allReady, vytvoří výčet všech objektů, které mají finalizátor, který již není root. Pokud se používá nezávisle, zobrazí seznam všech objektů ve frontách finalizovatelných a připravených k dokončení. |
adresa objektu FindAppDomain<> | Určuje doménu aplikace objektu na zadané adrese. |
FindRoots-gen<N> | -gen libovolný |<adresa objektu> | Způsobí přerušení ladicího programu v ladicím programu v další kolekci zadané generace. Efekt se resetuje, jakmile dojde k přerušení. Pokud chcete přerušit další kolekci, musíte příkaz znovu vytvořit. Adresa objektu <> formulář tohoto příkazu se použije po přerušení způsobené -gen nebo -gen, ke kterému došlo. 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í statistiku popisovačů 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. Například nevracení paměti nastane, když kód zachová velké pole, protože silný popisovač uvolňování paměti na něj stále odkazuje a popisovač se zahodí bez uvolnění. Podporuje se jenom ve Windows. |
GCHandleLeaks | Vyhledá v paměti všechny odkazy na silné a připnuté popisovače uvolňování paměti v procesu a zobrazí výsledky. Pokud je nalezen popisovač, GCHandleLeaks příkaz zobrazí adresu odkazu. Pokud se popisovač v paměti nenajde, zobrazí tento příkaz oznámení. Podporuje se jenom ve Windows. |
adresa |
Zobrazí data, která označují, kdy registry nebo umístění zásobníku obsahují spravované objekty. Pokud dojde k uvolňování paměti, musí kolektor znát umístění odkazů na objekty, aby je mohl aktualizovat novými hodnotami ukazatele objektu. |
GCRoot [-nostacks] [-all] <adresa objektu> | Zobrazí informace o odkazech (nebo kořenech) objektu na zadané adrese. Příkaz GCRoot prozkoumá celou spravovanou haldu a tabulku popisovačů v rámci jiných objektů a popisovačů v zásobníku. Každý zásobník se pak vyhledá na ukazatele na objekty a také se vyhledá fronta finalizátoru. Tento příkaz neurčoval, zda je kořen zásobníku platný nebo je zahozen. Pomocí příkazů clrstack a U přeložte rámec, do kterého patří místní hodnota nebo hodnota argumentu, abyste zjistili, jestli se kořen zásobníku stále používá. 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 pouze jedinečných kořenových certifikátů. |
GCWhere<adresa objektu> | Zobrazí umístění a velikost v haldě uvolňování paměti předaného argumentu. Pokud argument leží ve spravované haldě, ale není platná adresa objektu, zobrazí se velikost jako 0 (nula). |
nápověda (soshelp) [<příkaz>] [faq ] |
Zobrazí všechny dostupné příkazy, pokud není zadán žádný parametr, nebo zobrazí podrobné informace nápovědy o zadaném příkazu. Parametr faq zobrazuje odpovědi na nejčastější dotazy. |
heapStat [-inclUnrooted | -iu] | Zobrazí velikosti generování pro každou haldu a celkové volné místo v každé generaci na 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 příkazů Hist .Obecně platí, že nemusíte explicitně volat HistClear , protože každý HistInit vyčistí předchozí prostředky. |
HistInit | Inicializuje struktury SOS z protokolu zatížení uloženého v ladicím prostředí. |
HistObj<obj_address> | Zkontroluje všechny záznamy přemístění protokolu zatížení a zobrazí řetězec přemístění uvolňování paměti, které mohly vést k adrese předané jako argument. |
HistObjFind<obj_address> | Zobrazí všechny položky protokolu, které odkazují na objekt na zadané adrese. |
Zobrazí informace týkající se povýšení i přemístění zadaného kořenového adresáře. Kořenovou hodnotu lze použít ke sledování pohybu objektu prostřednictvím uvolňování paměti. |
|
IP2MD (ip2md) <> kód | Zobrazí strukturu MethodDesc na zadané adrese v kódu, který byl zkompilován JIT. |
ListNearObj (lno) <obj_address> | Zobrazí objekty předcházející zadané adrese a za zadanou adresou. Příkaz vyhledá adresu v haldě uvolňování paměti, která vypadá jako platný začátek spravovaného objektu (na základě platné tabulky metod) a objekt za adresou argumentu. Podporuje se jenom ve Windows. |
MinidumpMode [0] [1] | Zabraňuje spouštění nebezpečných příkazů při použití minidumpu. Pokud chcete tuto funkci povolit, předejte 0, pokud chcete tuto funkci zakázat, nebo 1. Ve výchozím nastavení je hodnota MinidumpMode nastavena na 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, protože požadované oblasti paměti nejsou mapovány nebo jsou mapovány pouze částečně. Tato možnost vás chrání před spouštěním nebezpečných příkazů proti minidumps. Podporuje se pouze u aplikace Windbg. |
-nebo- |
Zobrazí strukturu MethodTable a strukturu EEClass pro zadaný typ nebo metodu v zadaném modulu.Zadaný modul musí být načten v procesu. Chcete-li získat správný název typu, projděte modul pomocí Ildasm.exe (IL Disassembler). Můžete také předat * jako parametr názvu modulu a prohledat všechny načtené spravované moduly. Parametr názvu modulu Tento příkaz podporuje syntaxi ladicího programu systému Windows < module >! <type >. Typ musí být plně kvalifikovaný. |
ObjSize [<Adresa objektu>] | [-aggregate] [-stat] | Zobrazí velikost zadaného objektu. Pokud nezadáte žádné parametry, příkaz ObjSize zobrazí 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 s argumentem -stat k získání podrobného zobrazení typů, které jsou stále rootované. Pomocí !dumpheap -stat a !objsize -aggregate -statmůžete určit, které objekty už nejsou rootovány, a diagnostikovat různé problémy s pamětí. Podporuje se jenom ve Windows. |
PrintException [-vnořený] [-lines] [<Adresa objektu výjimky>] -nebo- PE [-vnořený] [ adresa objektu výjimky<>] |
Zobrazí a formátuje pole libovolného objektu odvozeného z třídy Exception na zadané adrese. Pokud nezadáte adresu, příkaz PrintException zobrazí 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í pole _stackTrace , což je binární pole. |
ProcInfo [-env] [-time] [-mem] | Zobrazí proměnné prostředí pro proces, čas procesoru jádra a statistiku využití paměti. Podporuje se pouze u aplikace Windbg. |
RCWCleanupList<adresy RCWCleanupList> | Zobrazí seznam obálky volatelné za běhu na zadané adrese, která čeká na vyčištění. Podporuje se pouze u aplikace Windbg. |
< základní adresa><název souboru> | Zapíše image, která je načtena v 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. |
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 -cache<cesta k mezipaměti> 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ářům ve formátu cesty symbolu Windows. Možnost -log povolí protokolování stahování symbolů. Možnost -loadsymbols 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] <><pseudoregistrační číslo> | Způsobí zastavení ladicího programu, pokud je vyvolán zadaná výjimka, ale bude pokračovat ve spuštění, když dojde k vyvolání jiných výjimek. Možnost odvozené zachytí zadanou výjimku a každou výjimku odvozenou od zadané výjimky. Podporuje se pouze u aplikace Windbg. |
SyncBlk [-all | <>syncblk ] | Zobrazí zadanou strukturu SyncBlock nebo všechny struktury SyncBlock . Pokud nepředáte žádné argumenty, příkaz SyncBlk zobrazí strukturu SyncBlock 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, kódy hash a informace o uzamyká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 () [-live] [-special] | Zobrazí všechna spravovaná vlákna v procesu. Příkaz Vlákna zobrazí id zkráceného ladicího programu, ID vlákna CLR a ID vlákna operačního systému. Kromě toho příkaz Vlákna 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. Mezi speciální vlákna patří 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. Podporováno pro nativní aplikace AOT. |
pole |
Zobrazí stav vlákna. Parametr value je hodnota pole State ve výstupu sestavy Vlákna. |
Změní zadaný token metadat v zadaném modulu na strukturu MethodTable nebo strukturu MethodDesc .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] <MethodDesc adresa> | <adresa kódu> | Zobrazí anotovaný překlad spravované metody určené ukazatelem struktury MethodDesc 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.Možnost -gcinfo způsobí, že příkaz U zobrazí GCInfo strukturu metody.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 možnost SYMOPT_LOAD_LINES zadané, SOS vyhledá 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 možnosti -n. |
VerifyHeap | Zkontroluje haldu uvolňování paměti, jestli neobsahují známky poškození, a zobrazí případné nalezené chyby. Poškození haldy může být způsobeno voláním volání platformy, která jsou vytvořena nesprávně. Podporováno pro nativní aplikace AOT. |
Zkontroluje objekt, který se předává jako argument pro známky poškození. Podporuje se jenom ve Windows. | |
mapy virtuálních počítačů |
Prochází virtuální adresní prostor a zobrazuje typ ochrany použité pro každou oblast. Podporuje se pouze u aplikace Windbg. |
|
Poskytuje souhrnné zobrazení virtuálního adresního prostoru seřazeného podle jednotlivých typů ochrany použitých na danou paměť (volná, vyhrazená, potvrzená, soukromá, mapovaná, image). Ve sloupci TOTAL se zobrazí výsledek sloupce PRŮMĚR vynásobený sloupcem BLK COUNT. Podporuje se pouze u aplikace Windbg. |
Ladicí program systému Windows
Rozšíření ladicího programu .NET můžete také použít 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 lze použít pro živé procesy nebo výpisy paměti.
Aplikace Windbg by měla rozšíření načíst automaticky, kdykoli laděný proces obsahuje modul runtime .NET (coreclr.dll nebo libcoreclr.so).
Ladicí program LLDB
Pokyny ke konfiguraci rozšíření ladicího programu .NET pro LLDB najdete v tématu dotnet-debugger-extensions. Příkazy lze použít pro živé procesy nebo výpisy paměti.
Ve výchozím nastavení se můžete ke všem příkazům dostat zadáním příkazu: sos [command_name]
. Běžné příkazy jsou ale aliasované, takže nepotřebujete předponu sos
:
Příkaz | Funkce |
---|---|
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 |
Poskytuje trasování zásobníku pouze spravovaného kódu. |
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 mezích 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ě. |
dumplock |
Zobrazí informace o objektech System.Threading.Lock, jako jsou vlákna (výchozí) nebo objekty, na které čekají vlákna. Tento příkaz je k dispozici pouze v rozšířeních ladicího programu .NET . |
dumplog |
Zapíše obsah protokolu zatížení 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 <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 mezích 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 |
Spustí dumpstack ve všech vláknech 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 registrované k 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í statistiku popisovačů 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 z protokolu zatížení uloženého v ladicím prostředí. |
histobj |
Zkontroluje všechny záznamy přemístění protokolu zatížení a zobrazí řetězec přemístění uvolňování paměti, které mohly vést k adrese předané jako argument. |
histobjfind |
Zobrazí všechny položky protokolu, které odkazují na objekt na zadané adrese. |
histroot |
Zobrazí informace týkající se povýšení i přemístění zadaného kořenového adresáře. |
histstats |
Zobrazí statistiky protokolu napětí. |
ip2md |
Zobrazí strukturu MethodDesc 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 |
Zobrazí struktury MethodTable a EEClass 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 z <root> do <target> . |
pe |
Zobrazí a formátuje pole libovolného objektu odvozeného z třídy Exception na zadané adrese. |
printexception |
Zobrazí a formátuje pole libovolného objektu odvozeného z třídy Exception 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ý poskytuje LLDB.
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 objekt, který se předává jako argument pro 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 . Zobrazení začíná od druhého prvku a pokračuje pro pět prvků. |
!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 |
Zobrazí strukturu MethodDesc na 902f40 adresy . |
!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í struktury MethodTable a EEClass metody Main v MainClass třídy v modulu unittest.exe . |
!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 . Zobrazení začíná od druhého prvku a pokračuje pro pět prvků. |
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 |
Zobrazí strukturu MethodDesc na 902f40 adresy . |
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í struktury MethodTable a EEClass metody Main v MainClass třídy v modulu unittest.exe . |
token2ee unittest.exe 02000003 |
Zobrazí informace o tokenu metadat na adrese 02000003 v modulu unittest.exe . |
clrthreads |
Zobrazí spravovaná vlákna. |
Viz také
- Úvod k výpisům paměti v .NET
- Naučte se ladit nevracení paměti v rozhraní .NET
- shromažďování a analýza výpisů paměti blog
- nástroj pro analýzu výpisu stavu systému (dotnet-dump)
- instalační program rozšíření ladicího programu .NET (dotnet-debugger-extensions)
- nástroj pro analýzu haldy (dotnet-gcdump)