MDbg.exe (ladicí program z příkazového řádku .NET Framework)
Aplikace .NET Framework Command-Line Debugger pomáhá výrobcům nástrojů a vývojářům aplikací najít a opravit chyby v programech, které využívají .NET Framework Common Language Runtime. Tento nástroj používá API ladění za běhu k poskytování služeb ladění. Pomocí MDbg.exe můžete ladit pouze spravovaný kód; ladění nespravovaného kódu není podporováno.
Tento nástroj je k dispozici prostřednictvím NuGetu. Informace o instalaci najdete v tématu MDbg 0.1.0. Ke spuštění nástroje použijte konzolu Správce balíčků. Další informace o používání konzoly Správce balíčků naleznete v článku Správce balíčků Konzola.
Na příkazovém řádku Správce balíčků zadejte následující:
Syntaxe
MDbg [ProgramName[arguments]] [options]
Příkazy
Pokud jste v ladicím programu (jak je uvedeno příkazem příkazového řádku mdbg> ), zadejte jeden z příkazů popsaných v další části:
command [arguments]
Příkazy MDbg.exe rozlišují velká a malá písmena.
Příkaz | Popis |
---|---|
ap[rocess] [number] | Přepne na jiný laděný proces nebo vypíše dostupné procesy. Čísla nejsou skutečnými ID procesů (PID), ale seznam indexovaný od 0. |
a[ttach] [pid] | Připojí se k procesu nebo vytiskne dostupné procesy. |
b[reak] [ClassName.Method | FileName:LineNo] | Nastaví zarážku v zadané metodě. Moduly jsou prohledávány postupně. - break FileName:LineNo nastaví zarážku v umístění ve zdroji. - break ~number nastaví zarážku na symbolu, který se nedávno zobrazil pomocí příkazu x . - zalomit modul! ClassName.Method+IlOffset nastaví zarážku na plně kvalifikovaném umístění. |
block[ingObjects] | Zobrazí zámky monitoru, které blokují vlákna. |
ca[tch] [exceptionType] | Způsobí, že se ladicí program přeruší na všech výjimkách a nejen na neošetřených výjimkách. |
cl[earException] | Označí aktuální výjimku jako ošetřenou, takže provádění může pokračovat. Pokud příčina chyby nebyla odstraněna, výjimka se může rychle objevit znovu. |
conf[ig] [option value] | Zobrazí všechny konfigurovatelné parametry a ukazuje, jak jsou parametry vyvolány bez jakékoli volitelné hodnoty. Pokud je tato možnost zadaná, nastaví value se jako aktuální možnost. V současné době jsou k dispozici následující možnosti:- extpath nastaví cestu k hledání rozšíření při load použití příkazu.- extpath+ přidá cestu pro načítání rozšíření. |
del[ete] | Odstraní zarážku. |
de[tach] | Odpojí se od laděného procesu. |
d[own] [rámce] | Přesune aktivní blok zásobníku směrem dolů. |
echo | Vrátí zprávu do konzoly. |
enableNotif[ication] typeName 0|1 | Povolí (1) nebo zakáže (0) vlastní oznámení pro zadaný typ. |
ex[it] [exitcode] | Ukončí prostředí MDbg.exe a volitelně určí ukončovací kód procesu. |
fo[reach] [OtherCommand] | Provede příkaz na všech vláknech. OtherCommand je platný příkaz, který pracuje na jednom vlákně; foreach OtherCommand provádí stejný příkaz ve všech vláknech. |
f[unceval] [-ad Num] functionName [args ... ] |
Provede vyhodnocení funkce na aktuálním aktivním vlákně, kde funkce, která se má vyhodnotit, je functionName. Název funkce musí být plně kvalifikovaný, včetně oborů názvů. Možnost -ad určuje doménu aplikace, která se má použít k překladu funkce. Pokud není tato -ad možnost zadaná, doména aplikace pro rozlišení je ve výchozím nastavení doména aplikace, ve které se nachází vlákno, které se používá pro vyhodnocení funkce.Pokud funkce, která se vyhodnocuje, není statická, měl by být první předaný parametr ukazatelem this . Argumenty pro vyhodnocení funkce se vyhledávají ve všech aplikačních doménách.Pokud chcete požádat o hodnotu z domény aplikace, předponu proměnné nahraďte modulem a názvem domény aplikace; například funceval -ad 0 System.Object.ToString hello.exe#0!MyClass.g_rootRef . Tento příkaz vyhodnotí funkci System.Object.ToString v doméně 0 aplikace . Vzhledem k tomu, že ToString metoda je funkce instance, musí být první parametr ukazatelem this . |
g[o] | Způsobí, že program bude pokračovat, dokud nenarazí na zarážku, neukončí se nebo událost (například neošetřená výjimka) nezpůsobí zastavení programu. |
h[elp] [command] nebo ? [příkaz] |
Zobrazí popis všech příkazů nebo podrobný popis zadaného příkazu. |
ig[nore] [event] | Způsobí, že se ladicí program zastaví pouze v případě neošetřené výjimky. |
int[ercept] FrameNumber | Vrátí ladicí program na zadané číslo rámce. Jestliže ladicí program narazí na výjimku, použijte tento příkaz k navrácení ladicího programu na zadané číslo rámce. Stav programu můžete změnit pomocí příkazu set a pokračovat pomocí příkazu go . |
k[ill] | Zastaví aktivní proces. |
l[ist] [modules | appdomains | assemblyes] | Zobrazí načtené moduly, aplikační domény a sestavení. |
lo[ad] assemblyName | Načte rozšíření následujícím způsobem: Zadané sestavení je načteno a je proveden pokus o spuštění statické metody LoadExtension z Microsoft.Tools.Mdbg.Extension.Extension typu. |
log [eventType] | Nastavit nebo zobrazit události, které mají být protokolovány. |
mo[de] [option on/off] | Nastaví různé parametry ladicího programu. Seznam mode režimů ladění a jejich aktuálních nastavení můžete získat bez možností. |
mon[itorInfo] monitorReference | Zobrazí informace o uzamčení monitoru objektu. |
newo[bj] typeName [arguments...] | Vytvoří nový objekt typu typeName. |
n[ext] | Spustí kód a přesune se na další řádek (i v případě, že další řádek obsahuje mnoho volání funkce). |
Opendump pathToDumpFile | Otevře zadaný soubor s výpisem paměti pro ladění. |
o[ut] | Přejde na konec aktuální funkce. |
pa[th] [pathName] | Pokud není umístění v binárních souborech dostupné, vyhledá zdrojové soubory v zadaném umístění. |
p[rint] [var] | [-d ] |
Vytiskne všechny proměnné v oboru (tisk), vytiskne zadanou proměnnou (print var) nebo vytiskne proměnné ladicího programu (tisk-d ). |
printe[xception] [-r] | Vypíše poslední výjimku pro aktuální vlákno. –r Pokud chcete získat informace o celém řetězci výjimek, použijte možnost (rekurzivní) pro procházení InnerException vlastnosti objektu výjimky. |
pro[cessenum] | Zobrazí aktivní procesy. |
q[uit] [exitcode] | Ukončí prostředí MDbg.exe, volitelně vypíše ukončovací kód procesu. |
re[sume] [* | [~ ]threadNumber] |
Obnoví aktuální vlákno nebo vlákno určené parametrem threadNumber . Pokud je parametr threadNumber zadán jako * nebo pokud číslo vlákna začíná ~ , příkaz se vztahuje na všechna vlákna s výjimkou jednoho určeného parametrem threadNumber.Obnovení nepozastaveného vlákna nebude mít žádný vliv. |
r[un] [-d (ebug ) | -o (ptimize ) |-enc ] [[path_to_exe] [args_to_exe]] |
Zastaví aktuální proces (pokud existuje) a spustí nový. Pokud se nepředá žádný spustitelný argument, spustí tento příkaz program, který byl dříve proveden příkazem run . Pokud je zadán argument spustitelného souboru, zadaný program se spustí pomocí volitelně zadaných argumentů.Pokud jsou události načtení třídy, načtení modulu a spuštění vlákna ignorovány (což ve výchozím nastavení jsou), program se zastaví na prvním spustitelném příkazu hlavního vlákna. Pomocí některého z následujících příznaků můžete přinutit ladicí program, aby prováděl kompilaci kódu just-in-time (JIT): - -d ( ebug ) zakáže optimalizace. Toto je výchozí nastavení pro MDbg.exe.- -o ( ptimize ) vynutí, aby kód běžel více jako vně ladicího programu, ale také ztěžuje prostředí ladění. Toto je výchozí nastavení pro použití mimo ladicí program.- -enc povolí funkci Upravit a pokračovat, ale dojde k dosažení výkonu. |
Nastavení hodnoty proměnné= | Změní hodnotu kterékoli proměnné v rozsahu. Můžete také vytvořit vlastní proměnné ladicího programu a přiřadit k nim referenční hodnoty z vaší aplikace. Tyto hodnoty se chovají jako popisovače původní hodnoty i tehdy, když je původní proměnná mimo rozsah. Všechny proměnné ladicího programu musí začínat $ (například $var ). Tyto popisovače můžete vymazat jejich nastavením na prázdnou hodnotu pomocí tohoto příkazu:set $var= |
Stip [-il ] číslo |
Nastaví aktuální ukazatel příkazu (IP) v souboru na určenou pozici. Pokud zadáte -il možnost, číslo představuje společný mezisazení jazyka (CIL) v metodě. Jinak číslo představuje číslo řádku ve zdroji. |
sh[ow] [lines] | Určuje počet řádků, které chcete zobrazit. |
s[tep] | Přesune spuštění do další funkce na aktuálním řádku, nebo přejde na další řádek, pokud neexistuje žádná funkce, do které by se dalo přejít. |
su[spend] [* | [~]threadNumber] | Pozastaví aktuální vlákno nebo vlákno určené parametrem threadNumber . Pokud je argument threadNumber zadán jako * , příkaz se vztahuje na všechna vlákna. Pokud číslo vlákna začíná ~ , příkaz se vztahuje na všechna vlákna s výjimkou jednoho určeného argumentem threadNumber. Pozastavená vlákna jsou vyloučena ze spuštění procesu příkazem go nebo step . Pokud v procesu nejsou pozastavená vlákna a vydáte příkaz Go , proces nebude pokračovat. V takovém případě se stiskem kláves CTRL-C vrátíte zpět do procesu. |
sy[mbol] commandName [commandValue] | Určuje jeden z následujících příkazů: - symbol path ["value" ] – Zobrazí nebo nastaví aktuální cestu symbolu.- symbol addpath "value" - Přidá do aktuální cesty symbolu.- symbol reload ["module" ] – Znovu načte všechny symboly nebo symboly pro zadaný modul.- symbol list [module ] – Zobrazuje aktuálně načtené symboly pro všechny moduly nebo zadaný modul. |
t[hread] [newThread] [-nick přezdívka] |
Příkaz vlákna bez parametrů zobrazí všechna spravovaná vlákna v aktuálním procesu. Vlákna jsou zpravidla identifikována číslem vlákna; pokud je však vlákno pojmenováno, zobrazí se místo čísla toto pojmenování. Pomocí parametru -nick můžete přiřadit přezdívku vláknu.- ThreadName -nick přiřadí přezdívku aktuálně spuštěné vlákno.Pojmenování nesmí být číselné hodnoty. Pokud aktuální vlákno má již přiděleno pojmenování, staré pojmenování se nahradí novým. Pokud je nové pojmenování prázdný řetězec (""), pojmenování pro aktuální vlákno se odstraní a vláknu se nepřidělí další pojmenování. |
u[p] | Přesune aktivní rámec zásobníku směrem nahoru. |
uwgc[handle] [var] | [adresa] | Vytiskne proměnnou sledovanou popisovačem. Popisovač lze zadat pomocí názvu nebo adresy. |
Kdy | Zobrazí aktuálně aktivní when příkazy.při odstranění všech | num [ [num num ...]] - Odstraní when příkaz určený číslem nebo všechny when příkazy, pokud all jsou zadány.when stopReason [specific_condition ] docmd [cmd cmd ...] ] – Parametr stopReason může být jeden z následujících:StepComplete , ProcessExited , ThreadCreated , , ModuleLoaded RemapOpportunityReached EvalException EvalComplete AttachComplete AssemblyUnloaded BreakpointHit UserBreak AsyncStop AssemblyLoaded ClassLoaded ControlCTrapped ExceptionThrown UnhandledExceptionThrown . NativeStop specific_condition může být jedna z následujících možností: - number - For ThreadCreated a BreakpointHit , aktivuje akci pouze v případě, že je zastaveno číslem ID vlákna nebo zarážky se stejnou hodnotou.- [ ! ]name - For ModuleLoaded , , ClassLoaded , AssemblyUnloaded AssemblyLoaded , ExceptionThrown a UnhandledExceptionThrown , aktivuje akci pouze v případě, že název odpovídá názvu stopReason.specific_condition musí být prázdné pro jiné hodnoty stopReason. |
w[here] [-v ] [-c hloubka] [threadID] |
Zobrazí informace o ladění týkající se rámců zásobníku. - Možnost -v poskytuje podrobné informace o každém zobrazeném rámečku zásobníku.– Určuje číslo pro depth omezení počtu zobrazených snímků. K zobrazení všech snímků použijte příkaz all. Výchozí volba je 100.– Pokud zadáte parametr threadID , můžete určit, které vlákno je přidruženo k zásobníku. Ve výchozím stavu se jedná pouze o aktuální vlákno. Pomocí všech příkazů získejte všechna vlákna. |
x [-c numSymbols] [module[! pattern]] |
Zobrazí funkce, které odpovídají pattern modulu.Pokud je zadán argument numSymbols , je výstup omezen na zadané číslo. Pokud ! (označující regulární výraz) není pro vzor zadán, zobrazí se všechny funkce. Pokud modul není zadaný, zobrazí se všechny načtené moduly. Symboly (~#) lze použít k nastavení zarážek pomocí příkazu break . |
Poznámky
Zkompilujte aplikaci do ladicího programu pomocí příznaků specifických pro kompilátor, které zajistí, že kompilátor vygeneruje symboly ladění. Další informace o těchto příznacích najdete v dokumentaci ke kompilátoru. Můžete ladit optimalizované aplikace, ale některé informace o ladění budou chybět. Například mnoho lokálních proměnných nebude vidět a řádky zdroje budou nepřesné.
Po kompilaci aplikace zadejte do příkazového řádku příkaz mdbg , aby se spustila ladicí relace, jak je znázorněno v následujícím příkladu.
C:\Program Files\Microsoft Visual Studio 8\VC>mdbg
MDbg (Managed debugger) v2.0.50727.42 (RTM.050727-4200) started.
Copyright (C) Microsoft Corporation. All rights reserved.
For information about commands type "help";
to exit program type "quit".
mdbg>
Výzva mdbg>
značí, že jste v ladicím programu.
Jakmile budete v ladicím programu, použijte příkazy a argumenty popsané v předchozí části.