illegalPrepareConstrainedRegion MDA

Note

Эта статья относится к .NET Framework. Он не применяется к более новым реализациям .NET, включая .NET 6 и более поздние версии.

Помощник illegalPrepareConstrainedRegion по управляемой отладке (MDA) активируется, когда RuntimeHelpers.PrepareConstrainedRegions вызов метода не сразу предшествует try инструкции обработчика исключений. Это ограничение находится на уровне MSIL, поэтому допускается наличие источника, отличного от кода, между вызовом и tryкомментариями.

Симптомы

Область ограниченного выполнения (CER), которая никогда не обрабатывается как такая, но как простой блок обработки исключений (finally или catch). В результате регион не выполняется в случае сбоя вне памяти или прерывания потока.

Причина

Шаблон подготовки для CER не соответствует правильному выполнению. Это событие ошибки. Вызов PrepareConstrainedRegions метода, используемый для пометки обработчиков исключений, как введение CER в их//catchfault/finallyfilter блоках, должен использоваться непосредственно перед инструкцией.try

Разрешение

Убедитесь, что вызов выполняется PrepareConstrainedRegions непосредственно перед инструкцией try .

Влияние на среду выполнения

Этот MDA не влияет на среду CLR.

Выходные данные

MDA отображает имя метода, вызывающего PrepareConstrainedRegions метод, смещение MSIL и сообщение, указывающее, что вызов не сразу предшествует началу блока пробы.

Конфигурация

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

Example

В следующем примере кода показан шаблон, который приводит к активации MDA.

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

См. также