Compartilhar via


illegalPrepareConstrainedRegion MDA

O illegalPrepareConstrainedRegion Assistente de depuração gerenciada (MDA) é ativado quando uma RuntimeHelpers.PrepareConstrainedRegions chamada de método não deve preceder imediatamente o try a declaração do manipulador de exceção. Essa restrição é em MSIL nível, portanto, é permitido ter não geradores de código fonte entre a chamada e o try, como comentários.

Sintomas

Uma região de execução restrita (CER) nunca é tratado como tal, mas como uma bloco de manipulação de exceção simple (finally ou catch). Como conseqüência, a região não é executado no evento de uma condição de falta de memória ou uma anulação de thread.

Causa

O padrão de preparação de uma CER não é seguido corretamente. Este é um evento de erro. O PrepareConstrainedRegions chamada de método usada para marcar os manipuladores de exceção como apresentando uma CER em seus catch/finally/fault/filter blocos devem ser usados imediatamente antes do try instrução.

Resolução

Certifique-se de que a chamada para PrepareConstrainedRegions ocorre imediatamente antes do tryinstrução.

Efeito sobre o tempo de execução.

Este MDA não tem efeito sobre o CLR.

Saída

O MDA exibe o nome da chamada do método de PrepareConstrainedRegions método, o deslocamento MSIL e uma mensagem indicando que a chamada não preceder o início do bloco try.

Configuração

<mdaConfig>
  <assistants>
    <illegalPrepareConstrainedRegion/>
  </assistants>
</mdaConfig>

Exemplo

O exemplo de código a seguir demonstra o padrão que faz com que este MDA ser ativado.

void MethodWithInvalidPCR()
{
    RuntimeHelpers.PrepareConstrainedRegions();
    Object o = new Object();
    try
    {
        …
    }
    finally
    {
        …
    }
}

Consulte também

Referência

MarshalAsAttribute

PrepareConstrainedRegions

Conceitos

Diagnosticar erros com assistentes de depuração gerenciada

Interop Marshaling