illegalPrepareConstrainedRegion MDA

illegalPrepareConstrainedRegion Asystent zarządzanego debugowania (MDA) jest aktywowany, gdy RuntimeHelpers.PrepareConstrainedRegions wywołanie metody nie poprzedza try natychmiast instrukcji procedury obsługi wyjątków. To ograniczenie jest na poziomie MSIL, więc dopuszczalne jest, aby źródło niegenerujące kodu między wywołaniem a tryelementem , takie jak komentarze.

Objawy

Ograniczony region wykonywania (CER), który nigdy nie jest traktowany jako taki, ale jako prosty blok obsługi wyjątków (finally lub catch). W związku z tym region nie jest uruchamiany w przypadku awarii poza pamięcią ani przerwania wątku.

Przyczyna

Wzorzec przygotowania cer nie jest prawidłowo przestrzegany. Jest to zdarzenie błędu. Wywołanie PrepareConstrainedRegions metody używane do oznaczania procedur obsługi wyjątków jako wprowadzenie cer w blokach//catchfault/finallyfilter musi być używane bezpośrednio przed instrukcją .try

Rozwiązanie

Upewnij się, że wywołanie ma PrepareConstrainedRegions miejsce bezpośrednio przed instrukcją try .

Wpływ na środowisko uruchomieniowe

To rozwiązanie MDA nie ma wpływu na clR.

Dane wyjściowe

MdA wyświetla nazwę metody wywołującej PrepareConstrainedRegions metodę, przesunięcie MSIL i komunikat wskazujący, że wywołanie nie poprzedza natychmiast początku bloku próby.

Konfiguracja

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

Przykład

Poniższy przykład kodu przedstawia wzorzec, który powoduje aktywowanie tego rozwiązania MDA.

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

Zobacz też