MDA illegalPrepareConstrainedRegion
L'assistente al debug gestito illegalPrepareConstrainedRegion viene attivato quando una chiamata al metodo RuntimeHelpers.PrepareConstrainedRegions non precede immediatamente l'istruzione try del gestore eccezioni. Questa restrizione è valida al livello MSIL. È pertanto consentito che siano presenti origini che non generano codice tra la chiamata e l'istruzione try, come i commenti.
Sintomi
Un'area a esecuzione vincolata (CER, Constrained Execution Region) che non viene mai considerata come tale, bensì come semplice blocco di gestione delle eccezioni (finally o catch). Di conseguenza, l'area non viene eseguita nel caso di una condizione di memoria insufficiente o di interruzione di un thread in modo imprevisto.
Causa
Il modello di preparazione di una CER non è stato seguito correttamente. Si tratta di un evento di errore. La chiamata al metodo PrepareConstrainedRegions utilizzata per contrassegnare i gestori eccezioni durante l'introduzione di una CER nei blocchi catch/finally/fault/filter associati deve essere utilizzata prima dell'istruzione try.
Risoluzione
Verificare che la chiamata al metodo PrepareConstrainedRegions venga effettuata prima dell'istruzione try.
Effetto sul runtime
Questo assistente al debug gestito non produce effetti su CLR.
Output
L'assistente al debug gestito visualizza il nome del metodo che chiama il metodo PrepareConstrainedRegions, l'offset MSIL e un messaggio nel quale viene indicato che la chiamata non precede l'inizio del blocco try.
Configurazione
<mdaConfig>
<assistants>
<illegalPrepareConstrainedRegion/>
</assistants>
</mdaConfig>
Esempio
Nell'esempio di codice riportato di seguito viene illustrato il modello che determina l'attivazione dell'assistente al debug gestito di questo argomento.
void MethodWithInvalidPCR()
{
RuntimeHelpers.PrepareConstrainedRegions();
Object o = new Object();
try
{
…
}
finally
{
…
}
}
Vedere anche
Riferimenti
Concetti
Diagnostica degli errori tramite gli assistenti al debug gestito