MDbg.exe (.NET Framework Kommandoradsfelsökare)
Kommandoradsfelsökaren för NET Framework hjälper verktygsleverantörer och programutvecklare att hitta och åtgärda buggar i program som är inriktade på .NET Framework common language runtime. Det här verktyget använder API:et för körningsfelsökning för att tillhandahålla felsökningstjänster. Du kan använda MDbg.exe för att endast felsöka hanterad kod. det finns inget stöd för felsökning av ohanterad kod.
Det här verktyget är tillgängligt via NuGet. Installationsinformation finns i MDbg 0.1.0. Om du vill köra verktyget använder du Package Manager-konsolen. Mer information om hur du använder Package Manager-konsolen finns i artikeln Package Manager Console .
I Package Manager-prompten skriver du följande:
Syntax
MDbg [ProgramName[arguments]] [options]
Kommandon
När du är i felsökningsprogrammet (enligt mdbg-prompten>) skriver du ett av kommandona som beskrivs i nästa avsnitt:
kommando [argument]
MDbg.exe kommandon är skiftlägeskänsliga.
Kommando | beskrivning |
---|---|
ap[rocess] [tal] | Växlar till en annan debugged process eller skriver ut tillgängliga processer. Siffrorna är inte verkliga process-ID:er (PID), utan en 0-indexerad lista. |
a[ttach] [pid] | Ansluter till en process eller skriver ut tillgängliga processer. |
b[reak] [ClassName.Method | FileName:LineNo] | Anger en brytpunkt för den angivna metoden. Moduler genomsöks sekventiellt. - break FileName:LineNo anger en brytpunkt på en plats i källan. - break ~number anger en brytpunkt på en symbol som nyligen visades med kommandot x . - brytmodul! ClassName.Method+IlOffset anger en brytpunkt på den fullständigt kvalificerade platsen. |
block[ingObjects] | Visar övervakningslås, som blockerar trådar. |
ca[tch] [exceptionType] | Gör att felsökaren bryter mot alla undantag och inte bara på de ohanterade undantagen. |
cl[earException] | Markerar det aktuella undantaget som hanterat så att körningen kan fortsätta. Om orsaken till undantaget inte har behandlats kan undantaget snabbt ändras. |
conf[ig] [alternativvärde] | Visar alla konfigurerbara alternativ och visar hur alternativen anropas utan några valfria värden. Om alternativet anges anger du value som aktuellt alternativ. Följande alternativ är för närvarande tillgängliga:- extpath anger sökvägen för att söka efter tillägg när load kommandot används.- extpath+ lägger till en sökväg för inläsning av tillägg. |
del[ete] | Tar bort en brytpunkt. |
de[tach] | Kopplar från en debugged process. |
d[own] [frames] | Flyttar den aktiva stackramen nedåt. |
eko | Ekar ett meddelande till konsolen. |
enableNotif[ication] typeName 0|1 | Aktiverar (1) eller inaktiverar (0) anpassade meddelanden för den angivna typen. |
ex[it] [exitcode] | Avslutar MDbg.exe-gränssnittet och anger eventuellt processens slutkod. |
fo[reach] [OtherCommand] | Utför ett kommando på alla trådar. OtherCommand är ett giltigt kommando som körs på en tråd. foreach OtherCommand utför samma kommando på alla trådar. |
f[unceval] [-ad Num] functionName [args ... ] |
Utför en funktionsutvärdering på den aktuella aktiva tråden där funktionen som ska utvärderas är functionName. Funktionsnamnet måste vara fullständigt kvalificerat, inklusive namnområden. Alternativet -ad anger den programdomän som ska användas för att lösa funktionen. Om alternativet -ad inte anges används programdomänen för lösning som standard till programdomänen där tråden som används för funktionsutvärdering finns.Om funktionen som utvärderas inte är statisk bör den första parametern som skickas in vara en this pekare. Alla programdomäner söks efter argument till funktionsutvärderingen..Om du vill begära ett värde från en programdomän prefixar du variabeln med modulen och programmets domännamn. till exempel funceval -ad 0 System.Object.ToString hello.exe#0!MyClass.g_rootRef . Det här kommandot utvärderar funktionen System.Object.ToString i programdomänen 0 . ToString Eftersom metoden är en instansfunktion måste den första parametern vara en this pekare. |
g[o] | Gör att programmet fortsätter tills det stöter på en brytpunkt, programmet avslutas eller en händelse (till exempel ett ohanterat undantag) gör att programmet stoppas. |
h[elp] [kommando] -eller- ? [kommando] |
Visar en beskrivning av alla kommandon eller en detaljerad beskrivning av ett angivet kommando. |
ig[nore] [händelse] | Gör att felsökningsprogrammet endast stoppas vid ohanterade undantag. |
int[ercept] FrameNumber | Återställer felsökningsprogrammet till ett angivet bildrutenummer. Om felsökningsprogrammet stöter på ett undantag använder du det här kommandot för att återställa felsökningsprogrammet till det angivna bildrutenumret. Du kan ändra programtillståndet med hjälp av kommandot set och fortsätta med hjälp av go-kommandot . |
k[ill] | Stoppar den aktiva processen. |
l[ist] [modules | appdomains | assemblies] | Visar inlästa moduler, programdomäner eller sammansättningar. |
lo[ad] assemblyName | Läser in ett tillägg på följande sätt: Den angivna sammansättningen läses in och ett försök görs sedan att köra den statiska metoden LoadExtension från Microsoft.Tools.Mdbg.Extension.Extension typen. |
log [eventType] | Ange eller visa de händelser som ska loggas. |
mo[de] [option on/off] | Anger olika felsökningsalternativ. Använd mode utan alternativ för att hämta en lista över felsökningslägena och deras aktuella inställningar. |
mon[itorInfo] monitorReference | Visar information om objektövervakarens lås. |
newo[bj] typeName [argument...] | Skapar ett nytt objekt av typen typeName. |
n[ext] | Kör kod och flyttas till nästa rad (även om nästa rad innehåller många funktionsanrop). |
Opendump pathToDumpFile | Öppnar den angivna dumpfilen för felsökning. |
o[ut] | Flyttas till slutet av den aktuella funktionen. |
pa[th] [pathName] | Söker i den angivna sökvägen efter källfilerna om platsen i binärfilerna inte är tillgänglig. |
p[rint] [var] | [-d ] |
Skriver ut alla variabler i omfånget (utskrift), skriver ut den angivna variabeln (utskrift var) eller skriver ut felsökarvariablerna (utskrift-d ). |
printe[xception] [-r] | Skriver ut det sista undantaget i den aktuella tråden. Använd alternativet –r (rekursiv) för att bläddra igenom InnerException egenskapen i undantagsobjektet för att få information om hela undantagskedjan. |
pro[cessenum] | Visar de aktiva processerna. |
q[uit] [exitcode] | Avslutar MDbg.exe-gränssnittet, om du vill ange processens slutkod. |
re[sume] [* | [~ ]threadNumber] |
Återupptar den aktuella tråden eller tråden som anges av parametern threadNumber . Om parametern threadNumber anges som * eller om trådnumret börjar med ~ gäller kommandot för alla trådar utom den som anges av threadNumber.Att återuppta en icke-pausad tråd har ingen effekt. |
r[un] [-d (ebug ) | -o (ptimize ) |-enc ] [[path_to_exe] [args_to_exe]] |
Stoppar den aktuella processen (om det finns en) och startar en ny. Om inget körbart argument skickas kör det här kommandot det program som tidigare kördes med run kommandot . Om det körbara argumentet anges körs det angivna programmet med de argument som eventuellt anges.Om klassbelastning, modulbelastning och trådstarthändelser ignoreras (som standard) stoppas programmet på den första körbara instruktionen i huvudtråden. Du kan tvinga felsökningsprogrammet att just-in-time (JIT) kompilera koden med hjälp av någon av följande tre flaggor: - -d ( ebug ) inaktiverar optimeringar. Detta är standardvärdet för MDbg.exe.- -o ( ptimize ) tvingar koden att köras mer som den gör utanför felsökningsprogrammet, men gör även felsökningsupplevelsen svårare. Detta är standardvärdet för användning utanför felsökningsprogrammet.- -enc aktiverar funktionen Redigera och Fortsätt men får en prestandaträff. |
Ange variabelvärde= | Ändrar värdet för valfri variabel i omfånget. Du kan också skapa egna felsökningsvariabler och tilldela referensvärden till dem inifrån programmet. Dessa värden fungerar som referenser till det ursprungliga värdet, och även det ursprungliga värdet ligger utanför omfånget. Alla felsökningsvariabler måste börja med $ (till exempel $var ). Rensa dessa referenser genom att ställa in dem på ingenting med hjälp av följande kommando:set $var= |
Setip [-il ] tal |
Anger den aktuella instruktionspekaren (IP) i filen till den angivna positionen. Om du anger alternativet -il representerar talet en CIL-förskjutning (Common Intermediate Language) i metoden. Annars representerar talet ett källradsnummer. |
sh[ow] [linjer] | Anger antalet rader som ska visas. |
s[tep] | Flyttar körningen till nästa funktion på den aktuella raden eller flyttas till nästa rad om det inte finns någon funktion att gå in i. |
su[spend] [* | [~]threadNumber] | Pausar den aktuella tråden eller tråden som anges av parametern threadNumber . Om threadNumber anges som * gäller kommandot för alla trådar. Om trådnumret börjar med ~ gäller kommandot för alla trådar utom den som anges av threadNumber. Pausade trådar undantas från att köras när processen körs av antingen go- eller step-kommandot. Om det inte finns några icke-pausade trådar i processen och du utfärdar go-kommandot fortsätter inte processen. I så fall trycker du på CTRL-C för att bryta dig in i processen. |
sy[mbol] commandName [commandValue] | Anger något av följande kommandon: - symbol path ["value" ] – Visar eller anger den aktuella symbolsökvägen.- symbol addpath "value" – Lägger till den aktuella symbolsökvägen.- symbol reload ["module" ] – Läser in alla symboler eller symboler för den angivna modulen igen.- symbol list [module ] – Visar de för närvarande inlästa symbolerna för antingen alla moduler eller den angivna modulen. |
t[hread] [newThread] [-nick smeknamn] |
Trådkommandot utan parametrar visar alla hanterade trådar i den aktuella processen. Trådar identifieras vanligtvis av sina trådnummer. Men om tråden har ett tilldelat smeknamn visas smeknamnet i stället. Du kan använda parametern -nick för att tilldela ett smeknamn till en tråd.- thread -nick threadName tilldelar ett smeknamn till den tråd som körs just nu.Smeknamn får inte vara siffror. Om den aktuella tråden redan har ett tilldelat smeknamn ersätts det gamla smeknamnet med det nya. Om det nya smeknamnet är en tom sträng (") tas smeknamnet för den aktuella tråden bort och inget nytt smeknamn tilldelas tråden. |
u[p] | Flyttar upp den aktiva stackramen. |
uwgc[handle] [var] | [adress] | Skriver ut variabeln som spåras av ett handtag. Referensen kan anges med namn eller adress. |
När | Visar de aktiva when uttrycken.när du tar bort alla num | [num [num ...]] – Tar bort instruktionen when som anges av talet eller alla when instruktioner om all den har angetts.när stopReason [specific_condition ] görcmd [cmd [cmd ...] ] – parametern stopReason kan vara något av följande:StepComplete , ProcessExited , ThreadCreated , BreakpointHit , ModuleLoaded , ClassLoaded , AssemblyLoaded , AssemblyUnloaded , ControlCTrapped , , ExceptionThrown , UnhandledExceptionThrown , AsyncStop , AttachComplete , UserBreak , EvalComplete , EvalException , , RemapOpportunityReached NativeStop .specific_condition kan vara något av följande: - number – För ThreadCreated och BreakpointHit , utlöser endast åtgärden när den stoppas av ett tråd-ID/brytpunktsnummer med samma värde.- [ ! ]name – För ModuleLoaded , ClassLoaded , AssemblyLoaded , AssemblyUnloaded , ExceptionThrown och UnhandledExceptionThrown , utlöser åtgärden endast när namnet matchar namnet på stopReason.specific_condition måste vara tom för andra värden för stopReason. |
w[here] [-v ] [-c djup] [threadID] |
Visar felsökningsinformation om stackramar. – Alternativet -v innehåller utförlig information om varje visad stackram.– Ange ett tal för gränser för depth hur många bildrutor som visas. Använd kommandot all för att visa alla bildrutor. Standardinställningen är 100.– Om du anger parametern threadID kan du styra vilken tråd som är associerad med stacken. Standardvärdet är endast den aktuella tråden. Använd kommandot all för att hämta alla trådar. |
x [-c numSymbols] [module[! pattern]] |
Visar funktioner som matchar pattern för en modul.Om numSymbols anges begränsas utdata till det angivna talet. Om ! (som anger ett reguljärt uttryck) inte har angetts för mönster visas alla funktioner. Om modulen inte tillhandahålls visas alla inlästa moduler. Symboler (~#) kan användas för att ange brytpunkter med hjälp av kommandot break . |
Kommentarer
Kompilera programmet som ska debuggas med hjälp av kompilatorspecifika flaggor som gör att kompilatorn genererar felsökningssymboler. Mer information om dessa flaggor finns i kompilatorns dokumentation. Du kan felsöka optimerade program, men viss felsökningsinformation saknas. Till exempel visas inte många lokala variabler och källrader blir felaktiga.
När du har kompilerats ditt program skriver du mdbg i kommandotolken för att starta en felsökningssession, som du ser i följande exempel.
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>
Uppmaningen mdbg>
anger att du är i felsökningsprogrammet.
När du är i felsökningsprogrammet använder du kommandona och argumenten som beskrivs i föregående avsnitt.