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 try
elementem , 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//catch
fault
/finally
filter
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ż
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla