Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis
Dieser Artikel ist spezifisch für .NET Framework. Sie gilt nicht für neuere Implementierungen von .NET, einschließlich .NET 6 und höherer Versionen.
Verwaltete Debugging-Assistenten (MDAs) sind Debughilfen, die mit der Common Language Runtime (CLR) arbeiten, um Informationen zum Laufzeitzustand bereitzustellen. Die Assistenten generieren Informationsmeldungen über Laufzeitereignisse, die Sie auf keine andere Art abfangen können. Sie können MDAs verwenden, um schwer zu findende Anwendungsfehler zu isolieren, die beim Übergang zwischen verwaltetem und nicht verwaltetem Code auftreten.
Sie können alle MDAs aktivieren oder deaktivieren , indem Sie der Windows-Registrierung einen Schlüssel hinzufügen oder eine Umgebungsvariable festlegen. Sie können bestimmte MDAs mithilfe von Anwendungskonfigurationseinstellungen aktivieren. Sie können zusätzliche Konfigurationseinstellungen für einige einzelne MDAs in der Konfigurationsdatei der Anwendung festlegen. Da diese Konfigurationsdateien beim Laden der Laufzeit analysiert werden, müssen Sie die MDA aktivieren, bevor die verwaltete Anwendung gestartet wird. Sie können sie nicht für Bereits gestartete Anwendungen aktivieren.
In der folgenden Tabelle sind die MDAs aufgeführt, die mit .NET Framework ausgeliefert werden:
Standardmäßig aktiviert .NET Framework eine Teilmenge von MDAs für alle verwalteten Debugger. Sie können den Standardsatz in Visual Studio anzeigen, indem Sie im Menü "Debuggen" >Windows-Ausnahmeeinstellungen auswählen und dann die Liste der verwalteten Debugging-Assistenten erweitern.
Aktivieren und Deaktivieren von MDAs
Sie können MDAs mithilfe eines Registrierungsschlüssels, einer Umgebungsvariablen und Anwendungskonfigurationseinstellungen aktivieren und deaktivieren. Sie müssen entweder den Registrierungsschlüssel oder die Umgebungsvariable aktivieren, um die Anwendungskonfigurationseinstellungen zu verwenden.
Tipp
Anstatt MDAs zu deaktivieren, können Sie verhindern, dass Visual Studio das MDA-Dialogfeld anzeigt, wenn eine MDA-Benachrichtigung empfangen wird. Wählen Sie dazu dieWindows-Ausnahmeeinstellungen> im Menü "Debuggen" aus, erweitern Sie die Liste der verwalteten Debugging-Assistenten, und aktivieren oder deaktivieren Sie dann das Kontrollkästchen "Unterbrechung beim Auslösen" für die einzelnen MDA.
Registrierungsschlüssel
Um MDAs zu aktivieren, fügen Sie den HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\MDA Unterschlüssel (Typ REG_SZ, Wert 1) in der Windows-Registrierung hinzu. Kopieren Sie das folgende Beispiel in eine Textdatei namens MDAEnable.reg. Öffnen Sie den Windows-Registrierungs-Editor (RegEdit.exe), und wählen Sie im Menü "Datei " die Option "Importieren" aus. Wählen Sie die MDAEnable.reg Datei aus, um MDAs auf diesem Computer zu aktivieren. Das Festlegen des Unterschlüssels auf den Zeichenfolgenwert 1 (nicht DWORD-Wert 1) ermöglicht das Lesen von MDA-Einstellungen aus der Datei "ApplicationName.suffix ".mda.config Datei. Die MDA-Konfigurationsdatei für Notepad würde z. B. notepad.exe.mda.configbenannt.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"MDA"="1"
Wenn auf dem Computer eine 32-Bit-Anwendung auf einem 64-Bit-Betriebssystem ausgeführt wird, sollte der MDA-Schlüssel wie folgt festgelegt werden:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework]
"MDA"="1"
Weitere Informationen finden Sie unterApplication-Specific Konfigurationseinstellungen . Die Registrierungseinstellung kann von der COMPLUS_MDA
Umgebungsvariable überschrieben werden. Weitere Informationen finden Sie unter Umgebungsvariable .
Um MDAs zu deaktivieren, legen Sie den MDA-Unterschlüssel auf 0 (Null) mithilfe des Windows-Registrierungs-Editors fest.
Standardmäßig sind einige MDAs aktiviert, wenn Sie eine Anwendung ausführen, die an einen Debugger angefügt ist, auch ohne den Registrierungsschlüssel hinzuzufügen. Sie können diese Assistenten deaktivieren, indem Sie die MDADisable.reg-Datei ausführen, wie weiter oben in diesem Abschnitt beschrieben.
Umgebungsvariable
Die MDA-Aktivierung kann auch von der Umgebungsvariable COMPLUS_MDA
gesteuert werden, die den Registrierungsschlüssel überschreibt. Die Zeichenfolge COMPLUS_MDA
ist eine durch Semikolon getrennte Liste von MDA-Namen und anderen Steuerzeichenfolgen, bei der die Groß-/Kleinschreibung nicht beachtet wird. Wenn Sie unter einem verwalteten oder nicht verwalteten Debugger beginnen, wird standardmäßig eine Reihe von MDAs aktiviert. Dies wird erzielt, indem die durch Semikolons getrennte Liste der MDAs, die standardmäßig unter Debuggern bereitgestellt werden, dem Wert der Umgebungsvariablen oder des Registrierungsschlüssels vorangestellt wird. Die speziellen Steuerzeichenfolgen sind die folgenden:
0
- Deaktiviert alle MDAs.1
- Liest MDA-Einstellungen von ApplicationName.mda.config.managedDebugger
– Aktiviert explizit alle MDAs, die implizit aktiviert werden, wenn eine verwaltete ausführbare Datei unter einem Debugger gestartet wird.unmanagedDebugger
– Aktiviert explizit alle MDAs, die implizit aktiviert werden, wenn eine nicht verwaltete ausführbare Datei unter einem Debugger gestartet wird.
Wenn konfliktende Einstellungen vorhanden sind, überschreiben die neuesten Einstellungen vorherige Einstellungen:
COMPLUS_MDA=0
deaktiviert alle MDAs, einschließlich solcher, die unter einem Debugger implizit aktiviert werden.COMPLUS_MDA=gcUnmanagedToManaged
stelltgcUnmanagedToManaged
zusätzlich zu allen MDAs bereit, die unter einem Debugger implizit aktiviert werden.COMPLUS_MDA=0;gcUnmanagedToManaged
aktiviertgcUnmanagedToManaged
, deaktiviert jedoch MDAs, die andernfalls implizit unter einem Debugger aktiviert werden.
Application-Specific Konfigurationseinstellungen
Sie können einige Assistenten einzeln in der MDA-Konfigurationsdatei für die Anwendung aktivieren, deaktivieren und konfigurieren. Um die Verwendung einer Anwendungskonfigurationsdatei zum Konfigurieren von MDAs zu aktivieren, muss entweder der MDA-Registrierungsschlüssel oder die COMPLUS_MDA
Umgebungsvariable festgelegt werden. Die Anwendungskonfigurationsdatei befindet sich in der Regel im selben Verzeichnis wie die ausführbare Datei (.exe) der Anwendung. Der Dateiname hat das Format ApplicationName.mda.config; beispiel: notepad.exe.mda.config. Assistenten, die in der Anwendungskonfigurationsdatei aktiviert sind, verfügen möglicherweise über Attribute oder Elemente, die das Verhalten dieses Assistenten steuern sollen.
Das folgende Beispiel zeigt, wie Sie das Marshalling aktivieren und konfigurieren:
<mdaConfig>
<assistants>
<marshaling>
<methodFilter>
<match name="*"/>
</methodFilter>
<fieldFilter>
<match name="*"/>
</fieldFilter>
</marshaling>
</assistants>
</mdaConfig>
Der Marshaling
-MDA gibt für jeden Übergang von verwalteten zu nicht verwalteten Typen in der Anwendung Informationen über den verwalteten Typ aus, der per Marshalling von einem verwalteten in einen nicht verwalteten Typ umgewandelt wird. Der Marshaling
-MDA kann außerdem die Namen der Methoden- und Strukturfelder filtern, die in den untergeordneten Elementen methodFilter bzw. fieldFilter angegeben sind.
Das folgende Beispiel zeigt, wie Sie mehrere MDAs mithilfe ihrer Standardeinstellungen aktivieren:
<mdaConfig>
<assistants>
<illegalPrepareConstrainedRegion />
<invalidCERCall />
<openGenericCERCall />
<virtualCERCall />
</assistants>
</mdaConfig>
Von Bedeutung
Wenn Sie mehr als einen Assistenten in einer Konfigurationsdatei angeben, müssen Sie diese in alphabetischer Reihenfolge auflisten. Wenn Sie z. B. sowohl die MDAs virtualCERCall
als auch die MDAs invalidCERCall
aktivieren möchten, müssen Sie den <invalidCERCall />
Eintrag vor dem <virtualCERCall />
Eintrag hinzufügen. Wenn sich die Einträge nicht in alphabetischer Reihenfolge befinden, wird eine unbehandelte Ausnahmemeldung für die Konfigurationsdatei angezeigt.
MDA-Ausnahmen
Wenn eine MDA aktiviert ist, ist sie auch dann aktiv, wenn Ihr Code nicht unter einem Debugger ausgeführt wird. Wenn ein MDA-Ereignis ausgelöst wird, wenn kein Debugger vorhanden ist, wird die Ereignismeldung in einem nicht behandelten Ausnahmedialogfeld angezeigt, obwohl es sich nicht um eine unbehandelte Ausnahme handelt. Um das Dialogfeld zu vermeiden, entfernen Sie die MDA-Aktivierungseinstellungen, wenn Der Code nicht in einer Debugumgebung ausgeführt wird.
Wenn Ihr Code in der integrierten Entwicklungsumgebung (Integrated Development Environment, IDE) von Visual Studio ausgeführt wird, können Sie das Ausnahmedialogfeld vermeiden, das für bestimmte MDA-Ereignisse angezeigt wird. Wählen Sie dazu im Menü "Debuggen " die Option "Windows-Ausnahmeeinstellungen>" aus. Erweitern Sie im Fenster "Ausnahmeeinstellungen " die Liste der verwalteten Debugging-Assistenten , und deaktivieren Sie dann das Kontrollkästchen " Beim Auslösen unterbrechen" für die einzelnen MDA. Sie können dieses Dialogfeld auch verwenden, um die Anzeige von MDA-Ausnahmedialogfeldern zu aktivieren .
MDA-Ausgabe
Die MDA-Ausgabe ähnelt dem folgenden Beispiel, das die Ausgabe von MDA PInvokeStackImbalance
zeigt:
Ein Aufruf der PInvoke-Funktion „MDATest!MDATest.Program::StdCall“ hat zu einem Ungleichgewicht im Stapel geführt. Dies liegt wahrscheinlich daran, dass die verwaltete PInvoke-Signatur nicht mit der nicht verwalteten Zielsignatur übereinstimmt. Überprüfen Sie, ob die Aufrufkonvention und die Parameter der PInvoke-Signatur mit der nicht verwalteten Zielsignatur übereinstimmen.