ilegalPrepareConstrainedRegion MDA
Nota
Este artigo é específico do .NET Framework. Ele não se aplica a implementações mais recentes do .NET, incluindo o .NET 6 e versões posteriores.
O illegalPrepareConstrainedRegion
assistente de depuração gerenciado (MDA) é ativado quando uma RuntimeHelpers.PrepareConstrainedRegions chamada de método não precede imediatamente a try
instrução do manipulador de exceções. Essa restrição está no nível MSIL, portanto, é permitido ter uma fonte não geradora de código entre a chamada e o try
, como comentários.
Sintomas
Uma região de execução restrita (CER) que nunca é tratada como tal, mas como um simples bloco de manipulação de exceção (finally
ou catch
). Como consequência, a região não é executada no caso de uma condição de falta de memória ou um thread abortar.
Motivo
O padrão de preparação para uma RCE não é seguido corretamente. Este é um evento de erro. A PrepareConstrainedRegions chamada de método usada para marcar manipuladores de exceção como introduzindo um CER em seus//catch
fault
/finally
filter
blocos deve ser usada imediatamente antes da try
instrução.
Resolução
Certifique-se de que a chamada para PrepareConstrainedRegions acontece imediatamente antes da try
declaração.
Efeito no tempo de execução
Este MDA não tem efeito sobre o CLR.
Saída
O MDA exibe o nome do método que chama o PrepareConstrainedRegions método, o deslocamento MSIL e uma mensagem indicando que a chamada não precede imediatamente 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 esse MDA seja ativado.
void MethodWithInvalidPCR()
{
RuntimeHelpers.PrepareConstrainedRegions();
Object o = new Object();
try
{
…
}
finally
{
…
}
}