Share via


MDA de illegalPrepareConstrainedRegion

Actualización: noviembre 2007

El Ayudante 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óntry.

Efecto en tiempo de ejecución

Este MDA no tiene ningún efecto en el CLR.

Resultados

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

Conceptos

Diagnóstico de errores con ayudantes de depuraciones administradas

Información general acerca del cálculo de referencia de interoperabilidad

Referencia

MarshalAsAttribute

PrepareConstrainedRegions