Cara menginisialisasi debugger kustom di platform seluler

Debugger .NET kustom biasanya dihosting dalam proses terpisah. Platform seluler membatasi atau melarang pembuatan proses tersebut, sehingga komponen debugger kustom sisi target harus dimuat ke dalam proses aplikasi.

Artikel ini hanya berlaku untuk inisialisasi debugger pada platform seluler (iOS dan Android) di .NET 11 dan versi yang lebih baru. Ini tidak berlaku untuk NativeAOT.

Menerapkan dan menyebarkan komponen sisi target

Komponen debuger di sisi target harus diimplementasikan sebagai pustaka dinamis profiler dengan titik masuk DllGetClassObject. Untuk contoh implementasi, lihat contoh profiler .NET.

Ini harus disebarkan bersama dengan pustaka dinamis libmscordbi dan libmscordaccore sebagai bagian dari aplikasi sesuai dengan kemasan pustaka asli platform target, penandatanganan kode, dan persyaratan pemuatan.

Muat komponen sisi target saat memulai

Agar CoreCLR memuat komponen Anda sebagai profiler, berikan pengaturan lingkungan berikut sebelum runtime dimulai:

Variabel Lingkungan Nilai
DOTNET_ENABLE_PROFILING 1
DOTNET_PROFILER {<profiler-CLSID>}
DOTNET_PROFILER_PATH <component-path>

Ganti <profiler-CLSID> dengan GUID profiler komponen Anda, dan pertahankan tanda kurung kurawal yang mengapitnya. Ganti <component-path> dengan jalur ke komponen asli dalam penyebaran aplikasi target.

Untuk detail tentang pengaturan ini, lihat Opsi konfigurasi runtime untuk penelusuran kesalahan dan pembuatan profil.

Gunakan konfigurasi peluncuran aplikasi platform Anda untuk menyediakan pengaturan ini.

Note

Meskipun prosedur ini menggunakan mekanisme profiler untuk menginisialisasi debugger, prosedur ini tidak menetapkan dukungan tujuan umum untuk profiler pihak ketiga di platform seluler.

Membuat antarmuka debugger

Di komponen sisi target, lakukan inisialisasi berikut:

  1. Muat libmscordbi pustaka dinamis dan panggil ekspornya CoreCLRCreateCordbObjectEx . Kueri objek yang dikembalikan untuk ICorDebug.
  2. Panggil ICorDebug::Initialize, dan daftarkan handler peristiwa terkelola Anda dengan ICorDebug::SetManagedHandler.
  3. Hubungkan ke aplikasi dengan ICorDebug::DebugActiveProcess.

Untuk menghindari terlewatnya peristiwa awal saat modul dimuat dan saat startup, koordinasikan pengaitan dengan startup runtime agar eksekusi terkelola tidak berjalan sebelum DebugActiveProcess selesai.

Setelah inisialisasi, gunakan ICorDebug antarmuka debugger seperti pada platform Unix lainnya.