Udostępnij za pośrednictwem


illegalPrepareConstrainedRegion MDA

Uwaga

Ten artykuł jest specyficzny dla programu .NET Framework. Nie ma zastosowania do nowszych implementacji platformy .NET, w tym .NET 6 i nowszych wersji.

Asystent illegalPrepareConstrainedRegion zarządzanego debugowania (MDA) jest aktywowany, gdy RuntimeHelpers.PrepareConstrainedRegions wywołanie metody nie poprzedza natychmiast try instrukcji programu 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 elementem try, 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 działa w przypadku braku pamięci lub przerwania wątku.

Przyczyna

Wzorzec przygotowywania 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 wprowadzenia 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

Ta usługa MDA nie ma wpływu na CLR.

Wyjście

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

Konfigurowanie

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

Przykład

W poniższym przykładzie kodu pokazano wzorzec, który powoduje aktywowanie tego rozwiązania MDA.

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

Zobacz też