Diagnostika chyb pomocí Pomocníků pro spravované ladění

Spravované pomocníky pro ladění (MDA) jsou pomůcky ladění, které pracují s modulem CLR (Common Language Runtime) a poskytují informace o stavu modulu runtime. Asistenti generují informační zprávy o událostech modulu runtime, které nelze jinak schytovat. Pomocí mdA můžete izolovat těžko najít chyby aplikace, ke kterým dochází při přechodu mezi spravovaným a nespravovaným kódem.

Všechny mdA můžete povolit nebo zakázat přidáním klíče do registru Windows nebo nastavením proměnné prostředí. Konkrétní mda můžete povolit pomocí nastavení konfigurace aplikace. V konfiguračním souboru aplikace můžete nastavit další nastavení konfigurace pro některé jednotlivé mdA. Vzhledem k tomu, že se tyto konfigurační soubory analyzují při načtení modulu runtime, musíte před spuštěním spravované aplikace povolit mdA. Nelze ji povolit pro aplikace, které už byly spuštěny.

Následující tabulka obsahuje seznam MDA, které jsou dodávány s rozhraním .NET Framework:

MDA
asynchronousThreadAbort
bindingFailure
callbackOnCollectedDelegate
contextSwitchDeadlock
dangerousThreadingAPI
dateTimeInvalidLocalFormat
dirtyCastAndCallOnInterface
disconnectedContext
dllMainReturnsFalse
exceptionSwallowedOnCallFromCom
failedQI
fatalExecutionEngineError
gcManagedToUnmanaged
gcUnmanagedToManaged
illegalPrepareConstrainedRegion
invalidApartmentStateChange
invalidCERCall
invalidFunctionPointerInDelegate
invalidGCHandleCookie
invalidIUnknown
invalidMemberDeclaration
invalidOverlappedToPinvoke
invalidVariant
jitCompilationStart
loaderLock
loadFromContext
marshalCleanupError
marshaling
memberInfoCacheCreation
moduloObjectHashcode
nonComVisibleBaseClass
notMarshalable
openGenericCERCall
overlappedFreeError
pInvokeLog
pInvokeStackImbalance
raceOnRCWCleanup
reentrancy
releaseHandleFailed
reportAvOnComRelease
streamWriterBufferedDataLost
virtualCERCall

Rozhraní .NET Framework ve výchozím nastavení aktivuje podmnožinu MDA pro všechny spravované ladicí programy. Výchozí sadu v sadě Visual Studio můžete zobrazit tak, že v nabídce Ladění zvolíte výjimku systému Windows>Nastavení a rozbalíte seznam Pomocníků pro spravované ladění.

Exception Settings window in Visual Studio

Povolení a zakázání mda

MdA můžete povolit a zakázat pomocí klíče registru, proměnné prostředí a nastavení konfigurace aplikace. Abyste mohli použít nastavení konfigurace aplikace, musíte povolit klíč registru nebo proměnnou prostředí.

Tip

Místo zakázání MDA můžete sadě Visual Studio zabránit v zobrazení dialogového okna MDA při každém přijetí oznámení MDA. Uděláte to tak, že v nabídce Ladění zvolíte Nastavenívýjimku systému Windows>, rozbalíte seznam Pomocníků pro spravované ladění a potom zaškrtnete nebo zrušíte zaškrtnutí políčka Zrušit při vyvolání pro jednotlivou sadu MDA.

Klíč registru

Pokud chcete povolit mda, přidejte HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\. NETFramework\MDA podklíč (typ REG_SZ, hodnota 1) v registru Windows. Zkopírujte následující příklad do textového souboru s názvem MDAEnable.reg. Otevřete Editor registru systému Windows (RegEdit.exe) a v nabídce Soubor zvolte Importovat. Výběrem souboru MDAEnable.reg povolte v daném počítači mda. Nastavení podklíče na řetězcovou hodnotu 1 (nikoli hodnota DWORD 1) umožňuje čtení nastavení MDA ze souboru ApplicationName.suffix.mda.config. Například konfigurační soubor MDA pro Poznámkový blok by se jmenoval notepad.exe.mda.config.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"MDA"="1"

Pokud počítač používá 32bitovou aplikaci v 64bitovém operačním systému, měl by být klíč MDA nastavený takto:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework]
"MDA"="1"

Další informace najdete v tématu Konfigurace specifická pro aplikaci Nastavení. Nastavení registru lze přepsat proměnnou COMPLUS_MDA prostředí. Další informace najdete v tématu Proměnná prostředí.

Pokud chcete zakázat mda, nastavte podklíč MDA na hodnotu 0 (nula) pomocí Editoru registru systému Windows.

Ve výchozím nastavení jsou některé MDA povoleny při spuštění aplikace, která je připojena k ladicímu programu, i bez přidání klíče registru. Tyto asistenty můžete zakázat spuštěním souboru MDADisable.reg , jak je popsáno výše v této části.

Proměnná prostředí

Aktivaci MDA může řídit také proměnná COMPLUS_MDAprostředí, která přepíše klíč registru. Řetězec COMPLUS_MDA je nerozlišující velká a malá písmena, seznam názvů MDA nebo jiných speciálních řídicích řetězců. Spuštění pod spravovaným nebo nespravovaným ladicím programem ve výchozím nastavení umožňuje sadu MDA. To se provádí implicitně tak, že implicitně předpovědíte seznam mda oddělený středníkem povolených ve výchozím nastavení v ladicím programu na hodnotu proměnné prostředí nebo klíče registru. Speciální řídicí řetězce jsou následující:

  • 0 - Deaktivuje všechny mda.

  • 1 – Načte nastavení MDA z ApplicationName.mda.config.

  • managedDebugger – Explicitně aktivuje všechny mda, které jsou implicitně aktivovány při spuštění spravovaného spustitelného souboru v ladicím programu.

  • unmanagedDebugger – Explicitně aktivuje všechny mda, které jsou implicitně aktivovány při spuštění nespravovaného spustitelného souboru v rámci ladicího programu.

Pokud existují konfliktní nastavení, nejnovější nastavení přepíší předchozí nastavení:

  • COMPLUS_MDA=0 zakáže všechny mda, včetně těch, které jsou implicitně povolené v ladicím programu.

  • COMPLUS_MDA=gcUnmanagedToManagedgcUnmanagedToManaged umožňuje kromě všech MDA, které jsou implicitně povoleny v ladicím programu.

  • COMPLUS_MDA=0;gcUnmanagedToManagedgcUnmanagedToManaged povolí, ale zakáže mda, které by jinak byly implicitně povoleny v rámci ladicího programu.

Konfigurace specifická pro aplikaci Nastavení

Některé asistenty můžete povolit, zakázat a nakonfigurovat jednotlivě v konfiguračním souboru MDA pro aplikaci. Chcete-li povolit použití konfiguračního souboru aplikace pro konfiguraci mdA, musí být nastaven klíč registru MDA nebo COMPLUS_MDA proměnná prostředí. Konfigurační soubor aplikace se obvykle nachází ve stejném adresáři jako spustitelný soubor aplikace (.exe). Název souboru má tvar ApplicationName.mda.config, například notepad.exe.mda.config. Asistenti, kteří jsou povoleni v konfiguračním souboru aplikace, mohou mít atributy nebo prvky navržené pro řízení chování pomocníka.

Následující příklad ukazuje, jak povolit a nakonfigurovat zařazování:

<mdaConfig>
  <assistants>
    <marshaling>
      <methodFilter>
        <match name="*"/>
      </methodFilter>
      <fieldFilter>
        <match name="*"/>
      </fieldFilter>
    </marshaling>
  </assistants>
</mdaConfig>

MdA Marshaling generuje informace o spravovaném typu, který se zařaďuje do nespravovaného typu pro každý přechod spravovaných na nespravovaný přechod v aplikaci. MDA Marshaling může také filtrovat názvy polí metody a struktury zadaných v podřízených elementech methodFilter a fieldFilter .

Následující příklad ukazuje, jak povolit více MDA pomocí výchozího nastavení:

<mdaConfig>
  <assistants>
    <illegalPrepareConstrainedRegion />
    <invalidCERCall />
    <openGenericCERCall />
    <virtualCERCall />
  </assistants>
</mdaConfig>

Důležité

Když v konfiguračním souboru zadáte více než jednoho asistenta, musíte je vypsat v abecedním pořadí. Pokud například chcete povolit jak virtualCERCallinvalidCERCall mda, tak i mda, musíte před položku přidat <invalidCERCall /><virtualCERCall /> položku. Pokud položky nejsou v abecedním pořadí, zobrazí se neošetřená zpráva o výjimce konfiguračního souboru.

Výjimky MDA

Pokud je povolená správa mobilních zařízení ( MDA), je aktivní i v případě, že se váš kód nespouštějí pod ladicím programem. Pokud je událost MDA vyvolána v případě, že ladicí program není k dispozici, zobrazí se zpráva události v neošetřeném dialogovém okně výjimky, i když se nejedná o neošetřenou výjimku. Pokud se chcete vyhnout dialogovému oknu, odeberte nastavení pro povolení MDA, když se váš kód nespouštějí v prostředí ladění.

Když se váš kód spustí v integrovaném vývojovém prostředí (IDE) sady Visual Studio, můžete se vyhnout dialogovému okně výjimky, které se zobrazí pro konkrétní události MDA. Uděláte to tak, že v nabídce Ladění zvolíte Nastavení Výjimka systému Windows>. V okně Výjimka Nastavení rozbalte seznam Pomocníků pro spravované ladění a zrušte zaškrtnutí políčka Přerušit při vyvolání jednotlivých pomocníků MDA. Toto dialogové okno můžete použít také k povolení zobrazení dialogových oken výjimek MDA.

Výstup MDA

Výstup MDA je podobný následujícímu příkladu, který ukazuje výstup z PInvokeStackImbalance MDA:

Volání funkce PInvoke MDATest! MDATest.Program::StdCall' má nevyvážený zásobník. Důvodem je pravděpodobně to, že spravovaný podpis PInvoke neodpovídá nespravovanému cílovému podpisu. Zkontrolujte, jestli konvence volání a parametry podpisu PInvoke odpovídají cílovému nespravovanému podpisu.

Viz také