Condividi tramite


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

MarshalAsAttribute

PrepareConstrainedRegions

Concetti

Diagnostica degli errori tramite gli assistenti al debug gestito

Marshalling di interoperabilità