MDA de illegalPrepareConstrainedRegion
El asistente para la depuración administrada (MDA) illegalPrepareConstrainedRegion se activa cuando una llamada al método RuntimeHelpers.PrepareConstrainedRegions no precede directamente a la instrucción try del controlador de excepciones. Esta restricción sólo afecta al ámbito de MSIL, por lo que entre la llamada y la instrucción try puede incluirse código que no genere código, como comentarios.
Síntomas
Una región de ejecución restringida (CER) nunca se considera como tal, sino como un simple bloque de control de excepciones (finally o catch). Como consecuencia, una región de este tipo no se ejecutará en caso de que se produzca una condición de falta de memoria o la anulación de un subproceso.
Motivo
No se ha seguido correctamente el modelo de preparación de una región CER. Se trata de un evento de error. La llamada al método PrepareConstrainedRegions que se utiliza para marcar que los controladores de excepciones presentan una región CER en sus bloques catch/finally/fault/filter debe utilizarse inmediatamente antes de la instrucción try.
Resolución
Asegúrese de que la llamada a PrepareConstrainedRegions se produzca inmediatamente antes de la instrucción try.
Efecto en tiempo de ejecución
Este MDA no tiene ningún efecto en el CLR.
Output
El MDA muestra el nombre del método que llama al método PrepareConstrainedRegions, el desplazamiento del lenguaje MSIL y un mensaje que indica que la llamada no precede directamente al inicio del bloque try.
Configuración
<mdaConfig>
<assistants>
<illegalPrepareConstrainedRegion/>
</assistants>
</mdaConfig>
Ejemplo
En el siguiente ejemplo de código se muestra el modelo que hace que se active este MDA.
void MethodWithInvalidPCR()
{
RuntimeHelpers.PrepareConstrainedRegions();
Object o = new Object();
try
{
…
}
finally
{
…
}
}
Vea también
Referencia
Conceptos
Diagnóstico de errores con ayudantes de depuraciones administradas