Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Annotazioni
Questo articolo è specifico di .NET Framework. Non si applica alle implementazioni più recenti di .NET, incluse .NET 6 e versioni successive.
Gli assistenti al debug gestito (MDA) sono strumenti di debug che funzionano con Common Language Runtime (CLR) per fornire informazioni sullo stato di runtime. Gli assistenti generano messaggi informativi sugli eventi di runtime che non è possibile intercettare in altro modo. È possibile usare mdas per isolare i bug dell'applicazione difficili da trovare che si verificano durante la transizione tra codice gestito e non gestito.
È possibile abilitare o disabilitare tutti gli mdA aggiungendo una chiave al Registro di sistema di Windows o impostando una variabile di ambiente. È possibile abilitare specifici MDAs utilizzando le impostazioni di configurazione dell'applicazione. È possibile impostare impostazioni di configurazione aggiuntive per alcune MDAs individuali nel file di configurazione dell'applicazione. Poiché questi file di configurazione vengono analizzati nel momento in cui viene caricato il runtime, è necessario abilitare l'assistente al debug gestito prima che inizi l'applicazione gestita. Non è possibile abilitarlo per le applicazioni già avviate.
La tabella seguente elenca le MDA fornite con .NET Framework.
Per impostazione predefinita, .NET Framework attiva un subset di mdA per tutti i debugger gestiti. È possibile visualizzare il set predefinito in Visual Studio scegliendoImpostazioni eccezioni di > dal menu Debug e quindi espandendo l'elenco Assistente debug gestito.
Abilitare e disabilitare le MDAs
È possibile abilitare e disabilitare mdas usando una chiave del Registro di sistema, una variabile di ambiente e le impostazioni di configurazione dell'applicazione. È necessario abilitare la chiave del Registro di sistema o la variabile di ambiente per usare le impostazioni di configurazione dell'applicazione.
Suggerimento
Invece di disabilitare mdA, è possibile impedire a Visual Studio di visualizzare la finestra di dialogo MDA ogni volta che viene ricevuta una notifica MDA. A tale scopo, scegliere Windows>Impostazioni eccezioni dal menu Debug, espandere l'elenco Assistenti al debug gestito e quindi selezionare o deselezionare la casella di controllo Interrompi quando lanciata per il singolo MDA.
Chiave del Registro di sistema
Per abilitare mdas, aggiungere la sottochiave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\MDA (tipo REG_SZ, valore 1) nel Registro di sistema di Windows. Copiare l'esempio seguente in un file di testo denominato MDAEnable.reg. Aprire l'Editor del Registro di sistema di Windows (RegEdit.exe) e scegliere Importa dal menu File. Selezionare il file MDAEnable.reg per abilitare mdas in tale computer. L'impostazione della sottochiave sul valore stringa 1 (valore non DWORD pari a 1) consente la lettura delle impostazioni MDA dal file ApplicationName.suffix.mda.config. Ad esempio, il file di configurazione MDA per Blocco note sarà denominato notepad.exe.mda.config.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"MDA"="1"
Se il computer esegue un'applicazione a 32 bit in un sistema operativo a 64 bit, la chiave MDA deve essere impostata come segue:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework]
"MDA"="1"
Per altre informazioni, vedere Application-Specific Impostazioni di configurazione . L'impostazione del COMPLUS_MDA Registro di sistema può essere sostituita dalla variabile di ambiente. Per altre informazioni, vedere Variabile di ambiente .
Per disabilitare mdas, impostare la sottochiave MDA su 0 (zero) usando l'editor del Registro di sistema di Windows.
Per impostazione predefinita, alcuni mdA vengono abilitati quando si esegue un'applicazione collegata a un debugger, anche senza aggiungere la chiave del Registro di sistema. È possibile disabilitare questi assistenti eseguendo il file MDADisable.reg come descritto in precedenza in questa sezione.
Variabile di ambiente
L'attivazione di MDA può essere controllata anche dalla variabile di ambiente COMPLUS_MDA, che esegue l'override della chiave del Registro di sistema. La COMPLUS_MDA stringa è un elenco delimitato da punti e virgola senza distinzione tra maiuscole e minuscole di nomi MDA o altre stringhe di controllo speciali. Avviando sotto un debugger gestito o non gestito, viene abilitato un insieme di assistenti al debug gestito per impostazione predefinita. Questa operazione viene eseguita anteponendo in modo implicito l'elenco delimitato da punto e virgola di MDA abilitati per impostazione predefinita nei debugger al valore della variabile di ambiente o della chiave del Registro di sistema. Le stringhe di controllo speciali sono le seguenti:
0- Disattiva tutti gli MDA.1- Legge le impostazioni MDA da ApplicationName.mda.config.managedDebugger- Attiva in modo esplicito tutti gli mdA attivati in modo implicito quando un eseguibile gestito viene avviato in un debugger.unmanagedDebugger- Attiva in modo esplicito tutti gli mdA attivati in modo implicito quando un eseguibile non gestito viene avviato in un debugger.
Se sono presenti impostazioni in conflitto, le impostazioni più recenti sostituiscono le impostazioni precedenti:
COMPLUS_MDA=0disabilita tutte le MDAs, incluse quelle abilitate implicitamente in un ambiente di debug.COMPLUS_MDA=gcUnmanagedToManagedabilitagcUnmanagedToManagedoltre a qualsiasi MDA (assistente di debug gestito) che è abilitato automaticamente in un debugger.COMPLUS_MDA=0;gcUnmanagedToManagedabilitagcUnmanagedToManagedma disabilita gli MDAs che altrimenti verrebbero abilitati implicitamente in un debugger.
Impostazioni di configurazione Application-Specific
È possibile abilitare, disabilitare e configurare alcuni assistenti singolarmente nel file di configurazione MDA per l'applicazione. Per abilitare l'uso di un file di configurazione dell'applicazione per la configurazione di MDA, è necessario impostare la chiave del Registro di sistema MDA o la COMPLUS_MDA variabile di ambiente. Il file di configurazione dell'applicazione si trova in genere nella stessa directory del file eseguibile dell'applicazione (.exe). Il nome del file ha il formato ApplicationName.mda.config; ad esempio, notepad.exe.mda.config. Gli assistenti abilitati nel file di configurazione dell'applicazione possono avere attributi o elementi progettati per controllare il comportamento dell'assistente.
L'esempio seguente illustra come abilitare e configurare il marshalling:
<mdaConfig>
<assistants>
<marshaling>
<methodFilter>
<match name="*"/>
</methodFilter>
<fieldFilter>
<match name="*"/>
</fieldFilter>
</marshaling>
</assistants>
</mdaConfig>
Marshaling MDA emette informazioni sul tipo gestito che viene trasferito a un tipo non gestito per ogni transizione da gestito a non gestito nell'applicazione. L'Agente di Debug Gestito Marshaling può anche filtrare i nomi dei metodi e dei campi di struttura forniti rispettivamente negli elementi figlio methodFilter e fieldFilter.
L'esempio seguente mostra come abilitare più MDAs utilizzando le loro impostazioni predefinite:
<mdaConfig>
<assistants>
<illegalPrepareConstrainedRegion />
<invalidCERCall />
<openGenericCERCall />
<virtualCERCall />
</assistants>
</mdaConfig>
Importante
Quando si specificano più assistenti in un file di configurazione, è necessario elencarli in ordine alfabetico. Ad esempio, se si desidera abilitare sia il MDA virtualCERCall che il MDA invalidCERCall, è necessario aggiungere la voce <invalidCERCall /> prima della voce <virtualCERCall />. Se le voci non sono in ordine alfabetico, viene visualizzato un messaggio di eccezione non gestita per un file di configurazione non valido.
Eccezioni MDA
Quando un MDA è abilitato, è attivo anche quando il codice non viene eseguito all'interno di un debugger. Se un evento MDA viene generato quando un debugger non è presente, il messaggio di evento viene visualizzato in una finestra di dialogo di eccezione non gestita, anche se non è un'eccezione non gestita. Per evitare la finestra di dialogo, rimuovere le impostazioni di abilitazione mda quando il codice non è in esecuzione in un ambiente di debug.
Quando il codice viene eseguito nell'ambiente di sviluppo integrato (IDE) di Visual Studio, è possibile evitare la finestra di dialogo eccezione visualizzata per eventi MDA specifici. Per fare ciò, nel menu Debug, scegliere Windows>Impostazioni eccezioni. Nella finestra Impostazioni eccezioni espandere l'elenco Assistenti di Debug Gestito e quindi deselezionare la casella di controllo Interrompi al lancio per il singolo assistente al debug gestito. È anche possibile usare questa finestra di dialogo per abilitare la visualizzazione delle finestre di dialogo eccezioni MDA.
MDA Output
L'output MDA è simile all'esempio seguente, che mostra l'output dell'assistente al debug gestito PInvokeStackImbalance :
Chiamata alla funzione PInvoke 'MDATest!MDATest.Program::StdCall' che ha sbilanciato lo stack. Ciò è probabile perché la firma PInvoke gestita non corrisponde alla firma di destinazione non gestita. Verificare che la convenzione di chiamata e i parametri della firma PInvoke corrispondano alla firma non gestita di destinazione.