Bagikan melalui


MDA illegalPrepareConstrainedRegion

Catatan

Artikel ini khusus untuk .NET Framework. Ini tidak berlaku untuk implementasi .NET yang lebih baru, termasuk .NET 6 dan versi yang lebih baru.

Asisten debugging terkelola (MDA) illegalPrepareConstrainedRegion diaktifkan ketika panggilan metode RuntimeHelpers.PrepareConstrainedRegions tidak segera mendahului pernyataan try handler pengecualian. Pembatasan ini berada di tingkat MSIL, sehingga diizinkan untuk memiliki sumber yang tidak menghasilkan kode antara panggilan dan try, seperti komentar.

Gejala

Wilayah eksekusi terkendala (CER) yang tidak pernah diperlakukan seperti itu, tetapi sebagai blok penanganan pengecualian sederhana (finally atau catch). Sebagai konsekuensinya, wilayah tidak berjalan jika terjadi kondisi di luar memori atau utas dibatalkan.

Penyebab

Pola persiapan untuk CER tidak diikuti dengan benar. Ini adalah peristiwa kesalahan. Panggilan metode PrepareConstrainedRegions yang digunakan untuk menandai penangan pengecualian sebagai pengenalan CER di blok catch/finally/fault/filter mereka harus digunakan segera sebelum pernyataan try.

Resolusi

Pastikan bahwa panggilan untuk PrepareConstrainedRegions terjadi segera sebelum pernyataan try.

Efek pada Runtime

MDA ini tidak berpengaruh pada runtime bahasa umum.

Output

MDA menampilkan nama metode yang memanggil metode PrepareConstrainedRegions, offset MSIL, dan pesan yang menunjukkan panggilan tidak segera mendahului awal blok coba.

Konfigurasi

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

Contoh

Contoh kode berikut menunjukkan pola yang menyebabkan MDA ini diaktifkan.

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

Lihat juga