Dela via


illegalPrepareConstrainedRegion MDA

Kommentar

Den här artikeln är specifik för .NET Framework. Det gäller inte för nyare implementeringar av .NET, inklusive .NET 6 och senare versioner.

Den illegalPrepareConstrainedRegion hanterade felsökningsassistenten (MDA) aktiveras när ett RuntimeHelpers.PrepareConstrainedRegions metodanrop inte omedelbart föregår instruktionen try för undantagshanteraren. Den här begränsningen är på MSIL-nivå, så det är tillåtet att ha en icke-kodgenererande källa mellan anropet tryoch , till exempel kommentarer.

Symtom

En begränsad körningsregion (CER) som aldrig behandlas som sådan, utan som ett enkelt undantagshanteringsblock (finally eller catch). Därför körs inte regionen i händelse av ett out-of-memory-villkor eller om en tråd avbryts.

Orsak

Förberedelsemönstret för en CER följs inte korrekt. Det här är en felhändelse. Metodanropet PrepareConstrainedRegions som används för att markera undantagshanterare som att införa en CER i sina//catchfault/finallyfilter block måste användas omedelbart före -instruktionen.try

Åtgärd

Kontrollera att anropet ska PrepareConstrainedRegions ske omedelbart före -instruktionen try .

Effekt på körningen

Denna MDA har ingen effekt på CLR.

Output

MDA visar namnet på metoden som anropar PrepareConstrainedRegions metoden, MSIL-förskjutningen och ett meddelande som anger att anropet inte omedelbart föregår början av try-blocket.

Konfiguration

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

Exempel

I följande kodexempel visas det mönster som gör att den här MDA:en aktiveras.

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

Se även