Share via


illegalPrepareConstrainedRegion-MDA

Aktualisiert: November 2007

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.

Ausgabe

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

Konzepte

Diagnostizieren von Fehlern mit Assistenten für verwaltetes Debuggen

Übersicht über das Interop-Marshalling

Referenz

MarshalAsAttribute

PrepareConstrainedRegions