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
Konzepte
Diagnostizieren von Fehlern mit Assistenten für verwaltetes Debuggen