Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anmärkning
Den här artikeln är specifik för .NET Framework. Det gäller inte för nyare implementeringar av .NET, inklusive .NET 6 och senare versioner.
Hanterade felsökningsassistenter (MDA) felsöker hjälpmedel som fungerar med CLR (Common Language Runtime) för att ge information om körningstillstånd. Assistenterna genererar informationsmeddelanden om körningshändelser som du annars inte kan fånga upp. Du kan använda MDA:er för att isolera programbuggar som uppstår när du övergår mellan hanterad och ohanterad kod.
Du kan aktivera eller inaktivera alla MDA:er genom att lägga till en nyckel i Windows-registret eller genom att ange en miljövariabel. Du kan aktivera specifika MDA:er med hjälp av inställningar för programkonfiguration. Du kan ange ytterligare konfigurationsinställningar för vissa enskilda MDA:er i programmets konfigurationsfil. Eftersom dessa konfigurationsfiler tolkas när runtime-miljön läses in måste du aktivera MDA innan det hanterade programmet startar. Du kan inte aktivera den för program som redan har startats.
I följande tabell visas de MDA:er som levereras med .NET Framework:
Som standard aktiverar .NET Framework en delmängd av MDA:er för alla hanterade felsökningsprogram. Du kan visa standarduppsättningen i Visual Studio genom att välja> på felsökningsmenyn och sedan expandera listan Hanterade felsökningsassistenter.
              
              
            
Aktivera och inaktivera MDA:er
Du kan aktivera och inaktivera MDA:er med hjälp av en registernyckel, en miljövariabel och programkonfigurationsinställningar. Du måste aktivera antingen registernyckeln eller miljövariabeln för att kunna använda programkonfigurationsinställningarna.
Tips/Råd
I stället för att inaktivera MDA:er kan du förhindra att Visual Studio visar MDA-dialogrutan när ett MDA-meddelande tas emot. För att göra det, välj Windows>Inställningar för undantag på menyn Felsökning, expandera listan Hanterade felsökningsassistenter och markera eller avmarkera sedan kryssrutan Bryt när den kastas för den enskilda MDA:en.
Registernyckel
Om du vill aktivera MDA lägger du till undernyckelnHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\MDA (typ REG_SZ, värde 1) i Windows-registret. Kopiera följande exempel till en textfil med namnet MDAEnable.reg. Öppna Windows-registereditorn (RegEdit.exe) och välj Importera på Arkiv-menyn. Välj filen MDAEnable.reg för att aktivera MDA på datorn. Om du anger undernyckeln till strängvärdet 1 (inte DWORD-värdet 1) kan du läsa MDA-inställningarna från ApplicationName.suffixet.mda.config-filen. Till exempel heter MDA-konfigurationsfilen för Anteckningar notepad.exe.mda.config.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"MDA"="1"
Om datorn kör ett 32-bitarsprogram på ett 64-bitars operativsystem bör MDA-nyckeln anges så här:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework]
"MDA"="1"
Mer information finns  iApplication-Specific Konfigurationsinställningar . Registerinställningen kan åsidosättas av COMPLUS_MDA miljövariabeln. Mer information finns i Miljövariabel .
Om du vill inaktivera MDA:er anger du MDA-undernyckeln till 0 (noll) med hjälp av Windows-registereditorn.
Som standard aktiveras vissa MDA:er när du kör ett program som är kopplat till ett felsökningsprogram, även utan att lägga till registernyckeln. Du kan inaktivera dessa assistenter genom att köra MDADisable.reg-filen enligt beskrivningen tidigare i det här avsnittet.
Miljövariabel
MDA-aktivering kan också styras av miljövariabeln COMPLUS_MDA, som åsidosätter registernyckeln. Strängen COMPLUS_MDA är en skiftlägeskänslig, semikolonavgränsad lista över MDA-namn eller andra särskilda kontrollsträngar. Genom att starta under en hanterad eller ohanterad debugger aktiveras en uppsättning MDA:er som standard. Detta görs genom att implicit föregripa den semikolonavgränsade listan över MDA:er som är aktiverade som standard under felsökningsprogram till värdet för miljövariabeln eller registernyckeln. De särskilda kontrollsträngarna är följande:
0– Inaktiverar alla MDA:er.1– Läser MDA-inställningar från ApplicationName.mda.config.managedDebugger– Aktiverar uttryckligen alla MDA:er som implicit aktiveras när en hanterad körbar fil startas under ett felsökningsprogram.unmanagedDebugger– Aktiverar uttryckligen alla MDA:er som implicit aktiveras när en ohanterad körbar fil startas under ett felsökningsprogram.
Om det finns motstridiga inställningar åsidosätter de senaste inställningarna tidigare inställningar:
COMPLUS_MDA=0inaktiverar alla MDA:er, inklusive de som implicit aktiveras under ett felsökningsprogram.COMPLUS_MDA=gcUnmanagedToManagedaktiverargcUnmanagedToManagedutöver eventuella MDA:er som implicit aktiveras under ett felsökningsprogram.COMPLUS_MDA=0;gcUnmanagedToManagedaktiverargcUnmanagedToManagedmen inaktiverar MDA:er som annars implicit skulle aktiveras under ett felsökningsprogram.
Application-Specific konfigurationsinställningar
Du kan aktivera, inaktivera och konfigurera vissa assistenter individuellt i MDA-konfigurationsfilen för programmet. Om du vill aktivera användning av en programkonfigurationsfil för att konfigurera MDA måste antingen MDA-registernyckeln eller COMPLUS_MDA miljövariabeln anges. Programkonfigurationsfilen finns vanligtvis i samma katalog som programmets körbara fil (.exe). Filnamnet har formatet ApplicationName.mda.config; till exempel notepad.exe.mda.config. Assistenter som är aktiverade i programkonfigurationsfilen kan ha attribut eller element som är utformade för att styra assistentens beteende.
I följande exempel visas hur du aktiverar och konfigurerar marshaling:
<mdaConfig>
  <assistants>
    <marshaling>
      <methodFilter>
        <match name="*"/>
      </methodFilter>
      <fieldFilter>
        <match name="*"/>
      </fieldFilter>
    </marshaling>
  </assistants>
</mdaConfig>
              Marshaling MDA avger information om den hanterade typen som omvandlas till en ohanterad typ för varje övergång från hanterad till ohanterad i programmet. 
              Marshaling MDA kan också filtrera namnen på de metod- och strukturfält som anges i de underordnade elementen methodFilter respektive fieldFilter.
I följande exempel visas hur du aktiverar flera MDA med hjälp av deras standardinställningar:
<mdaConfig>
  <assistants>
    <illegalPrepareConstrainedRegion />
    <invalidCERCall />
    <openGenericCERCall />
    <virtualCERCall />
  </assistants>
</mdaConfig>
Viktigt!
När du anger fler än en assistent i en konfigurationsfil måste du ange dem i alfabetisk ordning. Om du till exempel vill aktivera både virtualCERCall och invalidCERCall MDA måste du lägga till <invalidCERCall /> posten före <virtualCERCall /> posten. Om posterna inte är i alfabetisk ordning visas ett meddelande om en ohanterad ogiltig konfigurationsfilundantag.
MDA-undantag
När en MDA är aktiverad är den aktiv även när koden inte körs under ett felsökningsprogram. Om en MDA-händelse utlöses när ett felsökningsprogram inte finns visas händelsemeddelandet i en ohanterad undantagsdialogruta, även om det inte är ett ohanterat undantag. Undvik dialogrutan genom att ta bort de MDA-aktiverande inställningarna när koden inte körs i en felsökningsmiljö.
När koden körs i Visual Studio Integrated Development Environment (IDE) kan du undvika den undantagsdialogruta som visas för specifika MDA-händelser. Om du vill göra det går du till felsökningsmenyn och väljerWindows-undantagsinställningar>. I fönstret Undantagsinställningar expanderar du listan Hanterade felsökningsassistenter, och sedan avmarkerar du kryssrutan Bryt vid utlösning för den enskilda MDA:en. Du kan också använda den här dialogrutan för att aktivera visning av dialogrutor för MDA-undantag.
MDA-utdata
MDA-utdata liknar följande exempel, som visar utdata från PInvokeStackImbalance MDA:
Ett anrop till PInvoke-funktionen 'MDATest! MDATest.Program::StdCall' har obalanserat stacken. Detta beror troligen på att den hanterade PInvoke-signaturen inte matchar den ohanterade målsignaturen. Kontrollera att anropskonventionen och parametrarna för PInvoke-signaturen matchar den ohanterade målsignaturen.