Delen via


MDbg.exe (.NET Framework-opdrachtregeldebugger)

Het opdrachtregelopsporingsprogramma van NET Framework helpt leveranciers en toepassingsontwikkelaars bij het vinden en oplossen van fouten in programma's die gericht zijn op de algemene taalruntime van .NET Framework. Dit hulpprogramma maakt gebruik van de runtime-foutopsporings-API om foutopsporingsservices te bieden. U kunt MDbg.exe gebruiken om alleen beheerde code op te sporen; er is geen ondersteuning voor het opsporen van fouten in niet-beheerde code.

Dit hulpprogramma is beschikbaar via NuGet. Zie MDbg 0.1.0 voor installatie-informatie. Gebruik de Pakketbeheer Console om het hulpprogramma uit te voeren. Zie het artikel Pakketbeheer Console voor meer informatie over het gebruik van de Pakketbeheer Console.

Typ het volgende bij de Pakketbeheer prompt:

Syntaxis

MDbg [ProgramName[arguments]] [options]

Opdracht

Wanneer u zich in het foutopsporingsprogramma bevindt (zoals aangegeven door de mdbg-prompt> ), typt u een van de opdrachten die in de volgende sectie worden beschreven:

opdracht [argumenten]

MDbg.exe opdrachten hoofdlettergevoelig zijn.

Opdracht Beschrijving
ap[rocess] [getal] Schakelt over naar een ander foutopsporingsproces of drukt beschikbare processen af. De getallen zijn geen echte proces-id's (PID's), maar een 0-geïndexeerde lijst.
a[ttach] [pid] Wordt gekoppeld aan een proces of drukt beschikbare processen af.
b[reak] [ClassName.Method | FileName:LineNo] Hiermee stelt u een onderbrekingspunt in op de opgegeven methode. Modules worden opeenvolgend gescand.

- FileName onderbreken:LineNo stelt een onderbrekingspunt in op een locatie in de bron.
- break ~number stelt een onderbrekingspunt in op een symbool dat onlangs wordt weergegeven met de opdracht x .
- module break! ClassName.Method+IlOffset stelt een onderbrekingspunt in op de volledig gekwalificeerde locatie.
block[ingObjects] Geeft monitorvergrendelingen weer, die threads blokkeren.
ca[tch] [exceptionType] Zorgt ervoor dat het foutopsporingsprogramma wordt onderbroken op alle uitzonderingen en niet alleen op de niet-verwerkte uitzonderingen.
cl[earException] Markeert de huidige uitzondering als verwerkt, zodat de uitvoering kan worden voortgezet. Als de oorzaak van de uitzondering niet is opgelost, kan de uitzondering snel opnieuw worden afgeworpen.
conf[ig] [optiewaarde] Geeft alle configureerbare opties weer en laat zien hoe de opties worden aangeroepen zonder optionele waarden. Als de optie is opgegeven, stelt u deze value in als de huidige optie. De volgende opties zijn momenteel beschikbaar:

- extpath stelt het pad in om te zoeken naar extensies wanneer de load opdracht wordt gebruikt.
- extpath+ voegt een pad toe voor het laden van extensies.
del[ete] Hiermee verwijdert u een onderbrekingspunt.
de[tach] Los van een foutopsporingsproces.
d[own] [frames] Hiermee verplaatst u het actieve stackframe omlaag.
echo Hiermee wordt een bericht naar de console weergegeven.
enableNotif[ication] typeName 0|1 Hiermee schakelt u (1) of (0) aangepaste meldingen voor het opgegeven type uit.
ex[it] [exitcode] Sluit de MDbg.exe shell af en geeft desgewenst de afsluitcode voor het proces op.
fo[reach] [OtherCommand] Voert een opdracht uit op alle threads. OtherCommand is een geldige opdracht die op één thread werkt; foreach OtherCommand voert dezelfde opdracht uit voor alle threads.
f[unceval] [-ad Num] functionName [args ... ] Voert een functie-evaluatie uit op de huidige actieve thread waar de functie die moet worden geëvalueerd functionName is. De functienaam moet volledig zijn gekwalificeerd, inclusief naamruimten.

Met -ad de optie geeft u het toepassingsdomein op dat moet worden gebruikt om de functie op te lossen. Als de -ad optie niet is opgegeven, wordt het toepassingsdomein voor omzetting standaard ingesteld op het toepassingsdomein waar de thread die wordt gebruikt voor functie-evaluatie zich bevindt.

Als de functie die wordt geëvalueerd niet statisch is, moet de eerste doorgegeven parameter een this aanwijzer zijn. Alle toepassingsdomeinen worden gezocht naar argumenten voor de functie-evaluatie.

Als u een waarde van een toepassingsdomein wilt aanvragen, moet u de variabele vooraf laten gaan door de module- en toepassingsdomeinnaam; bijvoorbeeld funceval -ad 0 System.Object.ToString hello.exe#0!MyClass.g_rootRef. Met deze opdracht wordt de functie System.Object.ToString in het toepassingsdomein 0geëvalueerd. Omdat de ToString methode een exemplaarfunctie is, moet de eerste parameter een this aanwijzer zijn.
g[o] Zorgt ervoor dat het programma doorgaat totdat het een onderbrekingspunt tegenkomt, het programma wordt afgesloten of een gebeurtenis (bijvoorbeeld een niet-verwerkte uitzondering) zorgt ervoor dat het programma stopt.
h[elp] [opdracht]

– of –

? [opdracht]
Geeft een beschrijving weer van alle opdrachten of een gedetailleerde beschrijving van een opgegeven opdracht.
ig[nore] [gebeurtenis] Zorgt ervoor dat het foutopsporingsprogramma alleen stopt bij niet-verwerkte uitzonderingen.
int[ercept] FrameNumber Hiermee wordt het foutopsporingsprogramma teruggezet naar een opgegeven framenummer.

Als het foutopsporingsprogramma een uitzondering tegenkomt, gebruikt u deze opdracht om het foutopsporingsprogramma terug te draaien naar het opgegeven framenummer. U kunt de programmastatus wijzigen met behulp van de setopdracht en doorgaan met behulp van de go-opdracht.
k[ziek] Hiermee stopt u het actieve proces.
l[ist] [modules | appdomains assembly's | ] Geeft de geladen modules, toepassingsdomeinen of assembly's weer.
lo[ad] assemblyName Laadt een extensie op de volgende manier: de opgegeven assembly wordt geladen en er wordt geprobeerd de statische methode LoadExtension uit te voeren vanaf het Microsoft.Tools.Mdbg.Extension.Extension type.
log [eventType] De gebeurtenissen instellen of weergeven die moeten worden vastgelegd.
mo[de] [optie aan/uit] Hiermee stelt u verschillende opties voor foutopsporingsprogramma's in. Gebruik mode zonder opties een lijst met de foutopsporingsmodi en de huidige instellingen.
mon[itorInfo] monitorReference Geeft informatie weer over het vergrendelen van objectmonitoren.
newo[bj] typeName [argumenten...] Hiermee maakt u een nieuw object van het type TypeName.
n[ext] Code wordt uitgevoerd en naar de volgende regel verplaatst (zelfs als de volgende regel veel functie-aanroepen bevat).
Opendump pathToDumpFile Hiermee opent u het opgegeven dumpbestand voor foutopsporing.
o[ut] Hiermee gaat u naar het einde van de huidige functie.
pa[th] [pathName] Zoekt in het opgegeven pad naar de bronbestanden als de locatie in de binaire bestanden niet beschikbaar is.
p[rint] [var] | [-d] Alle variabelen in bereik (afdrukken) afdrukken, de opgegeven variabele afdrukken (print var) of de variabelen voor foutopsporing (afdrukken) afdrukken-d.
printe[xception] [-r] Hiermee wordt de laatste uitzondering op de huidige thread afgedrukt. Gebruik de –r optie (recursief) om de InnerException eigenschap in het uitzonderingsobject te doorlopen voor informatie over de hele keten van uitzonderingen.
pro[cessenum] Geeft de actieve processen weer.
q[uit] [exitcode] Sluit de MDbg.exe shell af, eventueel de afsluitcode voor het proces opgeven.
re[sume] [* | [~]threadNumber] Hervat de huidige thread of de thread die is opgegeven door de parameter threadNumber .

Als de parameter threadNumber is opgegeven als * of als het threadnummer begint, ~is de opdracht van toepassing op alle threads behalve de parameter die is opgegeven door threadNumber.

Het hervatten van een niet-onderbroken thread heeft geen effect.
r[un] [-d(ebug) | -o(ptimize) |-enc] [[path_to_exe] [args_to_exe]] Hiermee stopt u het huidige proces (indien aanwezig) en start u een nieuw proces. Als er geen uitvoerbaar argument wordt doorgegeven, wordt met deze opdracht het programma uitgevoerd dat eerder met de run opdracht is uitgevoerd. Als het uitvoerbare argument wordt opgegeven, wordt het opgegeven programma uitgevoerd met de optioneel opgegeven argumenten.

Als opstartgebeurtenissen voor klassebelasting, modulebelasting en thread-startgebeurtenissen worden genegeerd (zoals deze standaard zijn), stopt het programma op de eerste uitvoerbare instructie van de hoofdthread.

U kunt afdwingen dat het foutopsporingsprogramma just-in-time (JIT) de code compileert met behulp van een van de volgende drie vlaggen:

- -d( ebug ) schakelt optimalisaties uit. Dit is de standaardinstelling voor MDbg.exe.
- -o( ptimize ) dwingt de code uit te voeren alsof deze zich buiten het foutopsporingsprogramma bevindt, maar maakt de foutopsporingservaring ook moeilijker. Dit is de standaardinstelling voor gebruik buiten het foutopsporingsprogramma.
- -enc schakelt de functie Bewerken en Doorgaan in, maar er treedt een prestatietreffer op.
=Variabele waarde instellen Hiermee wijzigt u de waarde van een variabele binnen het bereik.

U kunt ook uw eigen foutopsporingsprogrammavariabelen maken en er referentiewaarden aan toewijzen vanuit uw toepassing. Deze waarden fungeren als ingangen voor de oorspronkelijke waarde en zelfs de oorspronkelijke waarde valt buiten het bereik. Alle variabelen voor foutopsporingsprogramma's moeten beginnen met $ (bijvoorbeeld $var). Wis deze ingangen door ze in te stellen op niets met behulp van de volgende opdracht:

set $var=
Setip [-il] getal Hiermee stelt u de huidige instructieaanwijzer (IP) in het bestand in op de opgegeven positie. Als u de -il optie opgeeft, staat het getal voor een gemeenschappelijke tussenliggende taal (CIL) in de methode. Anders vertegenwoordigt het getal een bronregelnummer.
sh[ow] [lijnen] Hiermee geeft u het aantal regels weer te geven.
s[tep] Hiermee verplaatst u de uitvoering naar de volgende functie op de huidige regel of gaat u naar de volgende regel als er geen functie is om in te stappen.
su[spend] [* | [~]threadNumber] Onderbreekt de huidige thread of de thread die is opgegeven door de parameter threadNumber . Als threadNumber is opgegeven als *, is de opdracht van toepassing op alle threads. Als het threadnummer begint met~, is de opdracht van toepassing op alle threads behalve de threadNumber die is opgegeven. Onderbroken threads worden uitgesloten van uitvoering wanneer het proces wordt uitgevoerd door de opdracht Go of Step . Als er geen niet-onderbroken threads in het proces zijn en u de go-opdracht uitgeeft, wordt het proces niet voortgezet. Druk in dat geval op Ctrl-C om het proces in te breken.
sy[mbol] commandName [commandValue] Hiermee geeft u een van de volgende opdrachten:

- symbol path ["value"] - Hiermee wordt het huidige symboolpad weergegeven of ingesteld.
- symbol addpath"value" - Wordt toegevoegd aan het huidige symboolpad.
- symbol reload ["module"] - Laadt alle symbolen of de symbolen voor de opgegeven module opnieuw.
- symbol list [module] - Toont de momenteel geladen symbolen voor alle modules of de opgegeven module.
t[hread] [newThread] [-nick bijnaam] Met de threadopdracht zonder parameters worden alle beheerde threads in het huidige proces weergegeven. Threads worden meestal geïdentificeerd door hun threadnummers; Als de thread echter een toegewezen bijnaam heeft, wordt in plaats daarvan de bijnaam weergegeven. U kunt de -nick parameter gebruiken om een bijnaam toe te wijzen aan een thread.

- threadName -nick wijst een bijnaam toe aan de momenteel actieve thread.

Bijnamen kunnen geen getallen zijn. Als de huidige thread al een toegewezen bijnaam heeft, wordt de oude bijnaam vervangen door de nieuwe. Als de nieuwe bijnaam een lege tekenreeks ("") is, wordt de bijnaam voor de huidige thread verwijderd en wordt er geen nieuwe bijnaam toegewezen aan de thread.
u[p] Hiermee verplaatst u het actieve stackframe omhoog.
uwgc[handle] [var] | [adres] Hiermee wordt de variabele afgedrukt die wordt bijgehouden door een ingang. De ingang kan worden opgegeven op naam of adres.
wanneer Geeft de huidige actieve when instructies weer.

wanneer u alle | num [ [numnum ...]] verwijdert - Hiermee verwijdert u de when instructie die is opgegeven door het getal of alle when instructies als all deze is opgegeven.

wanneer stopReason [specific_condition] docmd [ [cmdcmd ...] ] - De parameter stopReason kan een van de volgende zijn:

StepComplete, , ProcessExited, , , ModuleLoaded, , ClassLoaded, AssemblyLoaded, , UnhandledExceptionThrownControlCTrappedUserBreakEvalCompleteAttachCompleteNativeStopAssemblyUnloadedRemapOpportunityReachedExceptionThrownEvalExceptionAsyncStopBreakpointHitThreadCreated

specific_condition kan een van de volgende zijn:

- number - Voor ThreadCreated en BreakpointHitactiveert de actie alleen wanneer deze wordt gestopt door een thread-id/onderbrekingspuntnummer met dezelfde waarde.
- [!]name - Voor ModuleLoaded, ClassLoaded, AssemblyLoaded, AssemblyUnloaded, , ExceptionThrownen , UnhandledExceptionThrownactiveert de actie alleen wanneer de naam overeenkomt met de naam van de stopReason.

specific_condition moet leeg zijn voor andere waarden van stopReason.
w[hier] [-v] [-cdiepte] [threadID] Geeft foutopsporingsinformatie weer over stackframes.

- De -v optie bevat uitgebreide informatie over elk weergegeven stackframe.
- Een getal opgeven voor depth limieten hoeveel frames worden weergegeven. Gebruik de opdracht alle om alle frames weer te geven. De standaard is 100.
- Als u de threadID-parameter opgeeft, kunt u bepalen welke thread aan de stack is gekoppeld. De standaardwaarde is alleen de huidige thread. Gebruik de opdracht alle om alle threads op te halen.
x [-cnumSymbolen] [module[!patroon]] Geeft functies weer die overeenkomen met de pattern functie voor een module.

Als numSymbolen is opgegeven, is de uitvoer beperkt tot het opgegeven getal. Als ! (waarmee een reguliere expressie wordt aangegeven) niet is opgegeven voor een patroon, worden alle functies weergegeven. Als er geen module is opgegeven, worden alle geladen modules weergegeven. Symbolen (~#) kunnen worden gebruikt om onderbrekingspunten in te stellen met behulp van de opdracht Einde .

Opmerkingen

Compileer de toepassing om fouten op te sporen met behulp van compilerspecifieke vlaggen die ervoor zorgen dat uw compiler foutopsporingssymbolen genereert. Raadpleeg de documentatie van uw compiler voor meer informatie over deze vlaggen. U kunt fouten opsporen in geoptimaliseerde toepassingen, maar bepaalde foutopsporingsgegevens ontbreken. Veel lokale variabelen zijn bijvoorbeeld niet zichtbaar en bronregels zijn onnauwkeurig.

Nadat u uw toepassing hebt gecompileerd, typt u mdbg bij de opdrachtprompt om een foutopsporingssessie te starten, zoals wordt weergegeven in het volgende voorbeeld.

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>

De mdbg> prompt geeft aan dat u zich in het foutopsporingsprogramma bevindt.

Zodra u zich in het foutopsporingsprogramma bevindt, gebruikt u de opdrachten en argumenten die in de vorige sectie worden beschreven.

Zie ook