Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Nota
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) adalah alat bantu debugging yang bekerja dengan Common Language Runtime (CLR) untuk memberikan informasi tentang status runtime. Asisten menghasilkan pesan informasi tentang peristiwa runtime yang tidak dapat Anda jebak. Anda dapat menggunakan MDA untuk mengisolasi bug aplikasi yang sulit ditemukan yang terjadi saat transisi antara kode terkelola dan tidak terkelola.
Anda dapat mengaktifkan atau menonaktifkan semua MDA dengan menambahkan kunci ke registri Windows atau dengan mengatur variabel lingkungan. Anda dapat mengaktifkan MDA tertentu dengan menggunakan pengaturan konfigurasi aplikasi. Anda dapat mengatur pengaturan konfigurasi tambahan untuk beberapa MDA individual dalam file konfigurasi aplikasi. Karena file konfigurasi ini diurai ketika runtime dimuat, Anda harus mengaktifkan MDA sebelum aplikasi terkelola dimulai. Anda tidak dapat mengaktifkannya untuk aplikasi yang telah dimulai.
Tabel berikut mencantumkan MDA yang dikirim dengan .NET Framework:
Secara default, .NET Framework mengaktifkan subset MDA untuk semua debugger terkelola. Anda dapat melihat set default di Visual Studio dengan memilihPengaturan Pengecualian> pada menu Debug, lalu memperluas daftar Asisten Penelusuran Kesalahan Terkelola.
Mengaktifkan dan Menonaktifkan MDA
Anda dapat mengaktifkan dan menonaktifkan MDA dengan menggunakan kunci registri, variabel lingkungan, dan pengaturan konfigurasi aplikasi. Anda harus mengaktifkan kunci registri atau variabel lingkungan untuk menggunakan pengaturan konfigurasi aplikasi.
Petunjuk / Saran
Alih-alih menonaktifkan MDA, Anda dapat mencegah Visual Studio menampilkan kotak dialog MDA setiap kali pemberitahuan MDA diterima. Untuk melakukannya, pilih Windows>Pengaturan Pengecualian pada menu Debug, perluas daftar Asisten Penelusuran Kesalahan Terkelola, lalu pilih atau kosongkan kotak centang Berhenti Saat Dilempar untuk MDA individual.
Kunci Registri
Untuk mengaktifkan MDA, tambahkan subkuntang HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\MDA (ketik REG_SZ, nilai 1) di registri Windows. Salin contoh berikut ke dalam file teks bernama MDAEnable.reg. Buka Editor Registri Windows (RegEdit.exe), dan dari menu File pilih Impor. Pilih file MDAEnable.reg untuk mengaktifkan MDA di komputer tersebut. Mengatur subkunci ke nilai string 1 (bukan nilai DWORD 1) memungkinkan pembacaan pengaturan MDA dari file ApplicationName.suffix.mda.config. Misalnya, file konfigurasi MDA untuk Notepad akan diberi nama notepad.exe.mda.config.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"MDA"="1"
Jika komputer menjalankan aplikasi 32-bit pada sistem operasi 64-bit, maka kunci MDA harus diatur seperti berikut:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework]
"MDA"="1"
Lihat Pengaturan KonfigurasiApplication-Specific untuk informasi selengkapnya. Pengaturan registri dapat dibatalkan oleh variabel lingkungan COMPLUS_MDA. Lihat Variabel Lingkungan untuk informasi selengkapnya.
Untuk menonaktifkan MDA, atur subkuntah MDA ke 0 (nol) menggunakan Editor Registri Windows.
Secara default, beberapa MDA diaktifkan saat Anda menjalankan aplikasi yang dilampirkan ke debugger, bahkan tanpa menambahkan kunci registri. Anda dapat menonaktifkan asisten ini dengan menjalankan file MDADisable.reg seperti yang dijelaskan sebelumnya di bagian ini.
Variabel lingkungan
Aktivasi MDA juga dapat dikontrol oleh variabel lingkungan COMPLUS_MDA, yang menggantikan kunci registri. String COMPLUS_MDA adalah daftar nama MDA yang tidak peka huruf besar/kecil dan dibatasi titik koma atau string kontrol khusus lainnya. Memulai dalam debugger terkelola atau tidak dikelola mengaktifkan sekumpulan MDA secara default. Ini dilakukan dengan secara implisit menambahkan daftar MDA yang dibatasi titik koma yang diaktifkan secara default di bawah debugger ke nilai variabel lingkungan atau kunci registri. String kontrol khusus adalah sebagai berikut:
0- Menonaktifkan semua MDA.1- Membaca pengaturan MDA dari ApplicationName.mda.config.managedDebugger- Secara eksplisit mengaktifkan semua MDA yang aktif secara implisit saat aplikasi terkelola dijalankan di bawah debugger.unmanagedDebugger- Secara eksplisit mengaktifkan semua MDA yang diaktifkan secara implisit ketika executable yang tidak terkelola dimulai di bawah debugger.
Jika ada pengaturan yang bertentangan, pengaturan terbaru akan menimpa pengaturan sebelumnya:
COMPLUS_MDA=0menonaktifkan semua MDA, termasuk yang diaktifkan secara implisit dalam lingkungan debugging.COMPLUS_MDA=gcUnmanagedToManagedmengaktifkangcUnmanagedToManagedselain MDA apa pun yang diaktifkan secara implisit di bawah debugger.COMPLUS_MDA=0;gcUnmanagedToManagedmengaktifkangcUnmanagedToManagedtetapi menonaktifkan MDA yang seharusnya diaktifkan secara implisit di bawah debugger.
Pengaturan Konfigurasi Application-Specific
Anda dapat mengaktifkan, menonaktifkan, dan mengonfigurasi beberapa asisten satu per satu dalam file konfigurasi MDA untuk aplikasi. Untuk mengaktifkan penggunaan file konfigurasi aplikasi untuk mengonfigurasi MDA, kunci registri MDA atau COMPLUS_MDA variabel lingkungan harus diatur. File konfigurasi aplikasi biasanya terletak di direktori yang sama dengan file aplikasi yang dapat dieksekusi (.exe). Nama file mengambil formulir ApplicationName.mda.config; misalnya, notepad.exe.mda.config. Asisten yang diaktifkan dalam file konfigurasi aplikasi mungkin memiliki atribut atau elemen yang dirancang untuk mengontrol perilaku asisten tersebut.
Contoh berikut menunjukkan cara mengaktifkan dan mengonfigurasi marshaling:
<mdaConfig>
<assistants>
<marshaling>
<methodFilter>
<match name="*"/>
</methodFilter>
<fieldFilter>
<match name="*"/>
</fieldFilter>
</marshaling>
</assistants>
</mdaConfig>
Marshaling MDA memancarkan informasi tentang jenis terkelola yang sedang diubah ke jenis tidak terkelola untuk setiap transisi dari jenis terkelola ke jenis tidak terkelola dalam aplikasi.
Marshaling MDA juga dapat memfilter nama bidang metode dan struktur yang disediakan dalam elemen methodFilter dan fieldFilter turunan.
Contoh berikut menunjukkan cara mengaktifkan beberapa MDA dengan menggunakan pengaturan defaultnya:
<mdaConfig>
<assistants>
<illegalPrepareConstrainedRegion />
<invalidCERCall />
<openGenericCERCall />
<virtualCERCall />
</assistants>
</mdaConfig>
Penting
Saat Anda menentukan lebih dari satu asisten dalam file konfigurasi, Anda harus mencantumkannya dalam urutan alfabet. Misalnya, jika Anda ingin mengaktifkan virtualCERCall dan invalidCERCall MDA, Anda harus menambahkan <invalidCERCall /> entri sebelum <virtualCERCall /> entri. Jika entri tidak dalam urutan alfabet, pesan pengecualian file konfigurasi tidak valid yang tidak tertangani ditampilkan.
Pengecualian MDA
Saat MDA diaktifkan, MDA aktif bahkan ketika kode Anda tidak dijalankan di bawah debugger. Jika peristiwa MDA dinaikkan saat debugger tidak ada, pesan peristiwa disajikan dalam kotak dialog pengecualian yang tidak tertangani, meskipun itu bukan pengecualian yang tidak tertangani. Untuk menghindari kotak dialog, hapus pengaturan yang mengaktifkan fitur MDA saat kode Anda tidak dieksekusi dalam lingkungan pemantauan debug.
Saat kode Anda dijalankan di lingkungan pengembangan terintegrasi (IDE) Visual Studio, Anda dapat menghindari kotak dialog pengecualian yang muncul untuk peristiwa MDA tertentu. Untuk melakukannya, pada menu Debug, pilihPengaturan Pengecualian>. Di jendela Pengaturan Pengecualian, perluas daftar Asisten Penelusuran Kesalahan Terkelola, lalu hapus centang pada kotak Berhenti Ketika Dilempar untuk MDA individual. Anda juga bisa menggunakan kotak dialog ini untuk mengaktifkan tampilan kotak dialog pengecualian MDA.
MDA Hasil
Keluaran MDA mirip dengan contoh berikut, yang memperlihatkan keluaran dari PInvokeStackImbalance MDA:
Panggilan ke fungsi PInvoke 'MDATest!MDATest.Program::StdCall' telah menyebabkan tumpukan menjadi tidak seimbang. Ini kemungkinan karena tanda tangan PInvoke terkelola tidak cocok dengan tanda tangan target yang tidak dikelola. Periksa apakah konvensi panggilan dan parameter tanda tangan PInvoke cocok dengan tanda tangan target yang tidak dikelola.