Megosztás a következőn keresztül:


MDbg.exe (.NET-keretrendszer parancssori hibakereső)

A NET-keretrendszer parancssori hibakeresője segít az eszközök gyártóinak és az alkalmazásfejlesztőknek megtalálni és kijavítani a hibákat azokban a programokban, amelyek a .NET-keretrendszer közös nyelvi futtatókörnyezetet célozzák. Ez az eszköz a futtatókörnyezet hibakeresési API-jának használatával biztosít hibakeresési szolgáltatásokat. A MDbg.exe csak felügyelt kód hibakeresésére használható; nem támogatott a nem felügyelt kód hibakeresése.

Ez az eszköz a NuGeten keresztül érhető el. A telepítéssel kapcsolatos információkért lásd: MDbg 0.1.0. Az eszköz futtatásához használja a Csomagkezelő konzolt. A Csomagkezelő konzol használatáról további információt a Csomagkezelő konzolról szóló cikkben talál.

A Csomagkezelő parancssorba írja be a következőket:

Syntax

MDbg [ProgramName[arguments]] [options]

Parancsok

Ha a hibakeresőben van (az mdbg> parancssora szerint), írja be a következő szakaszban leírt parancsok egyikét:

command [argumentumok]

MDbg.exe parancsok megkülönböztetik a kis- és nagybetűket.

Parancs Leírás
ap[rocess] [szám] Másik hibakeresési folyamatra vált, vagy kinyomtatja az elérhető folyamatokat. A számok nem valós folyamatazonosítók (PID-k), hanem 0 indexelt lista.
a[ttach] [pid] Csatol egy folyamathoz, vagy kinyomtatja az elérhető folyamatokat.
b[reak] [ClassName.Method | FileName:LineNo] Töréspontot állít be a megadott metódushoz. A modulok egymás után vannak beolvasva.

- break FileName:LineNo beállít egy töréspontot a forrás egy helyére.
- a break ~number egy töréspontot állít be az x paranccsal nemrég megjelenített szimbólumon.
- break modul! A ClassName.Method+IlOffset egy töréspontot állít be a teljes minősített helyen.
block[ingObjects] Megjeleníti a figyelőzárakat, amelyek blokkolják a szálakat.
ca[tch] [exceptionType] A hibakereső az összes kivételt megszakítja, és nem csak a kezeletlen kivételeket.
cl[earException] Az aktuális kivételt kezelve jelöli meg, hogy a végrehajtás folytatódni tud. Ha a kivétel okát nem kezelték, előfordulhat, hogy a kivétel gyorsan újra létrejön.
conf[ig] [option value] Megjeleníti az összes konfigurálható beállítást, és megjeleníti a beállítások meghívását opcionális értékek nélkül. Ha a beállítás meg van adva, az aktuális beállításként van beadva value . Jelenleg a következő lehetőségek érhetők el:

- extpath A parancs használatakor megadja a bővítmények load keresésének elérési útját.
- extpath+ Hozzáad egy elérési utat a bővítmények betöltéséhez.
del[ete] Megszakítópont törlése.
de[tach] Leválasztja a hibakeresési folyamatról.
d[saját] [keretek] Az aktív verem keretének lefelé mozgatása.
visszhang Üzenet visszhangja a konzolon.
enableNotif[ication] typeName 0|1 Engedélyezi (1) vagy letiltja a (0) egyéni értesítéseket a megadott típushoz.
ex[it] [exitcode] Kilép a MDbg.exe rendszerhéjból, és opcionálisan megadja a folyamat kilépési kódját.
fo[reach] [OtherCommand] Parancsot hajt végre az összes szálon. Az OtherCommand egy érvényes parancs, amely egy szálon működik; A foreach OtherCommand ugyanazt a parancsot hajtja végre minden szálon.
f[unceval] [-ad Num] functionName [args ... ] A függvény kiértékelése az aktuális aktív szálon, ahol az kiértékelendő függvény a functionName. A függvény nevének teljes mértékben minősítettnek kell lennie, beleértve a névtereket is.

A -ad beállítás megadja a függvény feloldásához használni kívánt alkalmazástartományt. Ha a -ad beállítás nincs megadva, a megoldáshoz használt alkalmazástartomány alapértelmezés szerint arra az alkalmazástartományra kerül, ahol a függvény kiértékeléséhez használt szál található.

Ha a kiértékelendő függvény nem statikus, az első átadott paraméternek mutatónak this kell lennie. A függvény kiértékeléséhez minden alkalmazástartomány argumentumokat keres.

Ha egy alkalmazástartományból szeretne értéket lekérni, előtagként adja meg a változót a modul és az alkalmazástartomány nevével; például funceval -ad 0 System.Object.ToString hello.exe#0!MyClass.g_rootRef. Ez a parancs kiértékeli a függvényt System.Object.ToString az alkalmazástartományban 0. Mivel a ToString metódus egy példányfüggvény, az első paraméternek mutatónak this kell lennie.
g[o] A program addig folytatódik, amíg törésponttal nem találkozik, a program kilép, vagy egy esemény (például egy kezeletlen kivétel) miatt a program leáll.
h[elp] [parancs]

-vagy-

? [parancs]
Megjeleníti az összes parancs leírását vagy egy adott parancs részletes leírását.
ig[nore] [esemény] A hibakereső csak a nem kezelt kivételeket állítja le.
int[ercept] FrameNumber Visszaállítja a hibakeresőt egy megadott keretszámra.

Ha a hibakereső kivételt tapasztal, ezzel a paranccsal visszaállíthatja a hibakeresőt a megadott keretszámra. A program állapotát a beállított paranccsal módosíthatja, és a go paranccsal folytathatja.
k[ill] Leállítja az aktív folyamatot.
l[ist] [modulok | appdomains | szerelvények] Megjeleníti a betöltött modulokat, alkalmazástartományokat vagy szerelvényeket.
lo[ad] assemblyName Betölt egy bővítményt a következő módon: A rendszer betölti a megadott szerelvényt, és megkísérli futtatni a statikus metódust LoadExtension a Microsoft.Tools.Mdbg.Extension.Extension típusból.
log [eventType] Állítsa be vagy jelenítse meg a naplózandó eseményeket.
mo[de] [option on/off] Különböző hibakeresői beállításokat állít be. A mode hibakeresési módok és az aktuális beállítások listájának lekéréséhez használja a beállítások nélkül.
mon[itorInfo] monitorReference Megjeleníti az objektumfigyelő zárolási adatait.
newo[bj] typeName [argumentumok...] Létrehoz egy új, TypeName típusú objektumot.
n[ext] Futtatja a kódot, és a következő sorra lép (még akkor is, ha a következő sor sok függvényhívást tartalmaz).
Opendump pathToDumpFile Megnyitja a hibakereséshez megadott memóriaképfájlt.
o[ut] Ugrás az aktuális függvény végére.
pa[th] [pathName] Megkeresi a forrásfájlok megadott elérési útját, ha a bináris fájlok helye nem érhető el.
p[rint] [var] | [-d] Kinyomtatja a hatókör összes változóját (nyomtatás), kinyomtatja a megadott változót (print var), vagy kinyomtatja a hibakereső változókat (nyomtatás-d).
printe[xception] [-r] Az aktuális szál utolsó kivételének nyomtatása. –r A (rekurzív) beállítással a kivételobjektum tulajdonságát léptetheti átInnerException, hogy információt kapjon a kivételek teljes láncáról.
pro[cessenum] Megjeleníti az aktív folyamatokat.
q[uit] [exitcode] Kilép a MDbg.exe rendszerhéjból, opcionálisan megadja a folyamat kilépési kódját.
re[sume] [* | [~]threadNumber] Folytatja az aktuális szálat vagy a threadNumber paraméter által megadott szálat.

Ha a threadNumber paraméter a threadNumber paraméterrel * van megadva, vagy ha a szálszám a következővel ~kezdődik, a parancs az összes szálra vonatkozik, kivéve a threadNumber által megadottt.

A fel nem függesztett szál folytatása nincs hatással.
r[un] [-d(ebug) | -o(ptimize) |-enc] [[path_to_exe] [args_to_exe]] Leállítja az aktuális folyamatot (ha van ilyen), és elindít egy újat. Ha nem ad át végrehajtható argumentumot, ez a parancs futtatja azt a programot, amelyet korábban a run paranccsal hajtottak végre. Ha a végrehajtható argumentum meg van adva, a megadott program az opcionálisan megadott argumentumokkal fut.

Ha az osztálybetöltés, a modulbetöltés és a szálindítási események figyelmen kívül vannak hagyva (alapértelmezés szerint), a program leáll a főszál első végrehajtható utasításán.

Kényszerítheti a hibakeresőt a kód igény szerinti (JIT) fordítására az alábbi három jelző egyikével:

- -d( ebug ) letiltja az optimalizálásokat. Ez az alapértelmezett MDbg.exe.
- -o( ptimize ) kényszeríti a kódot, hogy futtasson jobban, mint a hibakeresőn kívül, de megnehezíti a hibakeresési élményt is. Ez az alapértelmezett a hibakeresőn kívüli használatra.
- -enc lehetővé teszi a Szerkesztés és a Folytatás funkciót, de teljesítménybeli találatot ad.
Változó=értékének beállítása A hatókörön belüli változók értékét módosítja.

Saját hibakereső változókat is létrehozhat, és referenciaértékeket rendelhet hozzájuk az alkalmazásban. Ezek az értékek az eredeti érték leírójaként működnek, és még az eredeti érték is hatókörön kívül esik. Minden hibakereső változónak a következővel $ kell kezdődnie (például $var). Törölje ezeket a fogópontokat úgy, hogy a következő paranccsal semmire nem állítja őket:

set $var=
Setip [-il] szám Beállítja a fájl aktuális utasításmutatóját (IP-címét) a megadott helyre. Ha megadja a -il beállítást, a szám egy közös köztes nyelv (CIL) eltolását jelöli a metódusban. Ellenkező esetben a szám egy forrássorszámot jelöl.
sh[ow] [sorok] Megadja a megjelenítendő sorok számát.
s[tep] Áthelyezi a végrehajtást az aktuális sor következő függvényébe, vagy a következő sorba, ha nincs olyan függvény, amelybe léptethet.
su[spend] [* | [~]threadNumber] Felfüggeszti az aktuális szálat vagy a threadNumber paraméter által megadott szálat. Ha a threadNumber a következőként *van megadva, a parancs az összes szálra érvényes. Ha a szál száma a következővel ~kezdődik, a parancs az összes szálra vonatkozik, kivéve a threadNumber által megadottt. A felfüggesztett szálak nem futnak, ha a folyamatot a go vagy a step parancs futtatja. Ha a folyamat nem függesztett szálakat tartalmaz, és kiadja a go parancsot, a folyamat nem folytatódik. Ebben az esetben nyomja le a CTRL-C billentyűkombinációt a folyamatba való betöréshez.
sy[mbol] commandName [commandValue] A következő parancsok egyikét adja meg:

- symbol path ["value"] – Megjeleníti vagy beállítja az aktuális szimbólum elérési útját.
- symbol addpath"value" – Hozzáadja az aktuális szimbólum elérési útját.
- symbol reload ["module"] – Újra betölti az összes szimbólumot vagy a megadott modul szimbólumait.
- symbol list [module] – Megjeleníti az összes modul vagy a megadott modul aktuálisan betöltött szimbólumait.
t[hread] [newThread] [-nick beceneve] A paraméterek nélküli szálparancs az aktuális folyamat összes felügyelt szálát megjeleníti. A szálakat általában a szálszámuk azonosítja; azonban, ha a szál egy hozzárendelt becenevet, a becenév jelenik meg helyette. A paraméterrel -nick becenevet rendelhet egy szálhoz.

- A thread -nick threadName egy becenevet rendel az aktuálisan futó szálhoz.

A becenevek nem lehetnek számok. Ha az aktuális szál már rendelkezik hozzárendelt becenévvel, a régi becenevet lecseréli az újra. Ha az új becenév egy üres sztring (""), az aktuális szál beceneve törlődik, és a rendszer nem rendel új becenevet a szálhoz.
u[p] Az aktív verem keretének felfelé mozgatása.
uwgc[handle] [var] | [cím] Kiírja a változót egy fogóponttal nyomon követve. A leíró megadható név vagy cím alapján.
mikor Megjeleníti az aktuálisan aktív when utasításokat.

az összes | num törlésekor [num [num ...]] - Törli a when szám által megadott utasítást, vagy ha all az összes when utasítás meg van adva.

mikor stopReason [specific_condition] docmd [cmd [cmd ...] ] – A stopReason paraméter a következők egyike lehet:

StepComplete, ProcessExited, ThreadCreated, BreakpointHit, ModuleLoaded, ClassLoadedAssemblyLoaded, AssemblyUnloaded, ControlCTrapped, , ExceptionThrown, UnhandledExceptionThrown, AsyncStop, AttachComplete, UserBreak, EvalComplete, , RemapOpportunityReachedEvalExceptionNativeStop, .

specific_condition a következők egyike lehet:

- szám – A művelet BreakpointHitThreadCreated csak akkor aktiválódik, ha ugyanazzal az értékkel rendelkező szálazonosító/töréspontszám áll le.
- [!]name – A ModuleLoaded, ClassLoaded, AssemblyLoaded, AssemblyUnloadedExceptionThrown, és UnhandledExceptionThrown, csak akkor aktiválja a műveletet, ha a név megegyezik a stopReason nevével.

specific_condition a stopReason egyéb értékeinek üresnek kell lenniük.
w[itt] [-v] [-c mélység] [threadID] Megjeleníti a veremkeretekkel kapcsolatos hibakeresési információkat.

– A -v beállítás részletes információkat biztosít az egyes megjelenített veremkeretekről.
– Megadhatja, depth hogy hány képkockát jelenítsen meg a rendszer. Az összes képkockát az összes parancs használatával jelenítheti meg. Az alapértelmezett érték 100.
- Ha megadja a threadID paramétert, szabályozhatja, hogy melyik szál legyen társítva a veremhez. Az alapértelmezett érték csak az aktuális szál. Az összes szál lekéréséhez használja az összes parancsot.
x [-cnumSymbols] [modul[!minta]] Megjeleníti a pattern modulhoz tartozó függvényeket.

Ha numSymbols van megadva, a kimenet a megadott számra korlátozódik. Ha ! (reguláris kifejezés) nincs megadva a mintához, az összes függvény megjelenik. Ha a modul nincs megadva, az összes betöltött modul megjelenik. A szimbólumok (~#) a töréspontok beállításához használhatók a törésparancs használatával.

Megjegyzések

Lefordíthatja a hibakeresésre szolgáló alkalmazást fordítóspecifikus jelzőkkel, amelyek hibakeresési szimbólumok generálását okozzák a fordítónak. Ezekről a jelzőkről további információt a fordító dokumentációjában talál. Az optimalizált alkalmazásokat hibakereséssel is végezheti, de néhány hibakeresési információ hiányzik. Például számos helyi változó nem lesz látható, és a forrásvonalak pontatlanok lesznek.

Miután lefordította az alkalmazást, írja be az mdbg parancsot a parancssorba egy hibakeresési munkamenet elindításához, ahogyan az az alábbi példában látható.

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>

Az mdbg> üzenet azt jelzi, hogy a hibakeresőben van.

Ha már a hibakeresőben van, használja az előző szakaszban ismertetett parancsokat és argumentumokat.

Lásd még