Freigeben über


illegalPrepareConstrainedRegion-MDA

Der illegalPrepareConstrainedRegion-MDA (Managed Debugging Assistant, Assistent für verwaltetes Debuggen) wird aktiviert, wenn der try-Anweisung des Ausnahmehandlers nicht unmittelbar ein Aufruf der RuntimeHelpers.PrepareConstrainedRegions-Methode vorangestellt ist. Diese Einschränkung gilt auf MSIL-Ebene. Es ist deshalb zulässig, dass sich zwischen dem Aufruf und der try-Anweisung Quellcode befindet, der keinen Code generiert (z. B. Kommentare).

Symptome

Ein eingeschränkter Ausführungsbereich (Constrained Execution Region, CER), der nicht als solcher behandelt wird, sondern als einfacher Ausnahmehandlerblock (finally oder catch). Als Folge davon wird dieser Bereich bei nicht ausreichendem Speicherplatz oder im Fall eines Threadabbruchs nicht ausgeführt.

Ursache

Die Regeln zum Vorbereiten eines CER wurden nicht ordnungsgemäß befolgt. Es handelt sich hierbei um ein Fehlerereignis. Der Aufruf der PrepareConstrainedRegions-Methode, der zum Kennzeichnen des Beginns eines CER in den catch/finally/fault/filter-Blöcken von Ausnahmehandlern verwendet wird, muss direkt vor der try-Anweisung erfolgen.

Lösung

Stellen Sie sicher, dass der Aufruf von PrepareConstrainedRegions direkt vor der try-Anweisung erfolgt.

Auswirkungen auf die Laufzeit

Dieser MDA hat keine Auswirkungen auf die CLR.

Output

Der MDA zeigt den Namen der Methode an, die die PrepareConstrainedRegions-Methode aufgerufen hat, den MSIL-Offset und eine Meldung, die darauf hinweist, dass der Aufruf dem try-Block nicht unmittelbar vorangestellt ist.

Konfiguration

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

Beispiel

Im folgenden Codebeispiel ist der Ablauf dargestellt, der zum Aktivieren dieses MDA führt.

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

Siehe auch

Referenz

MarshalAsAttribute

PrepareConstrainedRegions

Konzepte

Diagnostizieren von Fehlern mit Assistenten für verwaltetes Debuggen

Interop-Marshalling