Bagikan melalui


Objek Debugger Asli di Ekstensi JavaScript - Pertimbangan Desain dan Pengujian

Topik ini menjelaskan pertimbangan desain dan pengujian untuk menggunakan objek debugger asli di ekstensi JavaScript.

Objek debugger asli mewakili berbagai konstruksi dan perilaku lingkungan debugger. Objek JavaScript dapat diteruskan ke ekstensi JavaScript (atau diperoleh dalam ekstensi) untuk memanipulasi status debugger.

Untuk informasi tentang ekstensi JavaScript objek Debugger, lihat Objek Debugger Asli di Ekstensi JavaScript.

Untuk informasi umum tentang bekerja dengan JavaScript, lihat Pembuatan Skrip JavaScript Debugger.

Pertimbangan Desain Model Data Debugger

Prinsip Desain

Pertimbangkan prinsip-prinsip berikut untuk membuat ekstensi debugger Anda menyajikan informasi yang dapat ditemukan, dapat dikueri, dan dapat ditulis.

  • Informasi dekat dengan lokasi yang diperlukan. Misalnya, informasi tentang kunci registri harus ditampilkan sebagai bagian dari variabel lokal yang berisi handel kunci registri.
  • Informasi terstruktur. Misalnya, informasi tentang kunci registri disajikan di bidang terpisah seperti jenis kunci, ACL kunci, nama kunci, dan nilai. Ini berarti bahwa bidang individual dapat diakses tanpa mengurai teks.
  • Informasi konsisten. Informasi tentang pegangan kunci registri disajikan dengan cara sesama mungkin seperti informasi tentang pegangan file.

Hindari pendekatan ini yang tidak mendukung prinsip-prinsip ini.

  • Jangan menyusun barang-barang Anda menjadi satu "Wastafel dapur". Hierarki terorganisir memungkinkan pengguna untuk menelusuri informasi yang mereka cari tanpa pengetahuan sebelumnya tentang apa yang mereka cari dan mendukung penemuan.
  • Jangan mengonversi ekstensi dbgeng klasik hanya dengan memindahkannya ke model sambil tetap menghasilkan layar teks mentah. Ini tidak dapat disusun dengan ekstensi lain dan tidak dapat dikueri dengan ekspresi LINQ. Alih-alih memecah data menjadi bidang terpisah yang dapat dikueri.

Pedoman Penamaan

  • Kapitalisasi bidang harus PascalCase. Pengecualian dapat dipertimbangkan untuk nama yang dikenal secara luas di casing lain, seperti jQuery.
  • Hindari menggunakan karakter khusus yang biasanya tidak akan digunakan dalam pengidentifikasi C++. Misalnya, hindari menggunakan nama seperti "Total Panjang" (yang berisi spasi), atau "[ukuran]" (yang berisi tanda kurung siku). Konvensi ini memungkinkan konsumsi yang lebih mudah dari bahasa skrip di mana karakter ini tidak diizinkan sebagai bagian dari pengidentifikasi, dan juga memungkinkan konsumsi yang lebih mudah dari jendela perintah.

Pedoman Organisasi dan Hierarki

  • Jangan perluas tingkat atas namespace layanan debugger. Sebagai gantinya, Anda harus memperluas simpul yang ada di debugger sehingga informasi ditampilkan di tempat yang paling relevan.
  • Jangan duplikat konsep. Jika Anda membuat ekstensi model data yang mencantumkan informasi tambahan tentang konsep yang sudah ada di debugger, perluas informasi yang ada daripada mencoba menggantinya dengan informasi baru. Dengan kata lain, ekstensi yang menampilkan detail tentang modul harus memperluas objek Modul yang ada daripada membuat daftar modul baru.
  • Perintah utilitas mengambang gratis harus menjadi bagian dari namespace Debugger.Utility . Mereka juga harus ditempatkan dalam namespace tambahan dengan tepat (misalnya Debugger.Utility.Collections.FromListEntry)

Kompatibilitas Mundur dan Perubahan yang Mengganggu

Skrip yang diterbitkan tidak boleh merusak kompatibilitas dengan skrip lain yang bergantung padanya. Misalnya, jika fungsi diterbitkan ke model, fungsi harus tetap berada di lokasi yang sama dan dengan parameter yang sama, jika memungkinkan.

Tidak Ada Penggunaan Sumber Daya Luar

  • Ekstensi tidak boleh menjalankan proses eksternal. Proses eksternal dapat mengganggu perilaku debugger, dan akan salah tingkah dalam berbagai skenario debugger jarak jauh (misalnya, remote dbgsrv, remote ntsd, dan "ntsd -d remote")
  • Ekstensi tidak boleh menampilkan antarmuka pengguna apa pun. Menampilkan elemen antarmuka pengguna akan berfungsi tidak semestinya pada skenario debugging jarak jauh, dan dapat mengganggu skenario debugging konsol.
  • Ekstensi tidak boleh memanipulasi mesin debugger atau antarmuka pengguna debugger melalui metode yang tidak terdokumentasi. Ini menyebabkan masalah kompatibilitas dan akan berprilaku salah pada klien debugger dengan UI yang berbeda.
  • Ekstensi harus mengakses informasi target hanya melalui API debugger yang didokumen. Mencoba mengakses informasi tentang target melalui Win32 API akan gagal dalam banyak skenario jarak jauh, dan bahkan beberapa skenario penelusuran kesalahan lokal melewati batas-batas keamanan.

Tidak Ada Penggunaan Fitur Khusus Dbgeng

Skrip yang dimaksudkan untuk digunakan sebagai ekstensi tidak boleh mengandalkan fitur khusus dbgeng jika memungkinkan (seperti menjalankan ekstensi debugger "klasik"). Skrip harus dapat digunakan di atas debugger apa pun yang menghosting model data.

Menguji Ekstensi Debugger

Ekstensi diharapkan berfungsi dalam berbagai skenario. Meskipun beberapa ekstensi mungkin khusus untuk skenario (seperti skenario penelusuran kesalahan kernel), sebagian besar ekstensi harus diharapkan berfungsi di semua skenario, atau memiliki metadata yang menunjukkan skenario yang didukung.

Kernel Mode

  • Penelusuran kesalahan kernel secara langsung
  • Penelusuran kesalahan cadangan kernel

Mode Pengguna

  • Penelusuran kesalahan mode pengguna langsung
  • Debugging cadangan mode pengguna

Selain itu, pertimbangkan skenario penggunaan debugger ini

  • Penelusuran kesalahan multi-proses
  • Debugging multi-sesi (misalnya dump + pengguna langsung dalam satu sesi)

Penggunaan Debugger Jarak Jauh

Uji operasi yang tepat dengan skenario penggunaan debugger jarak jauh.

  • dbgsrv remotes
  • kendali jarak jauh ntsd
  • jarak jauh -d ntsd

Untuk informasi selengkapnya, lihat Debugging Menggunakan CDB dan NTSD dan Mengaktifkan Server Proses.

Pengujian regresi

Selidiki penggunaan otomatisasi pengujian yang dapat memverifikasi fungsionalitas ekstensi Anda, saat versi baru debugger dirilis.

Lihat juga

Objek Debugger Asli di ekstensi JavaScript

Objek Debugger Asli di Ekstensi JavaScript - Detail Objek Debugger.

Pemrograman Debugger JavaScript

Contoh Skrip JavaScript Debugger