Teknik debugging yang digunakan di browser
(alan.norbauer.com)Tips memanfaatkan debugger browser
-
Breakpoint kondisional tingkat lanjut
- Memperluas fungsi breakpoint kondisional dengan menggunakan ekspresi yang memiliki efek samping
- Melalui logpoint/tracepoint, log dapat dicatat ke konsol tanpa menghentikan eksekusi
- Menggunakan
console.countuntuk menghitung jumlah eksekusi - Browser-browser utama mendukung logpoint/tracepoint (per Mei 2020)
-
Memanfaatkan panel Watch
- Dapat menggunakan
console.logdi panel Watch - Untuk menjalankan ekspresi saat DOM berubah, atur breakpoint perubahan DOM lalu tambahkan ekspresi watch
- Dapat menggunakan
-
Melacak call stack
- Melacak stack pemanggilan fungsi untuk menemukan pemanggilan yang tidak cocok
- Menggunakan
console.tracepada breakpoint kondisional untuk memeriksa call stack
-
Mengubah perilaku program
- Dapat mengubah perilaku program secara langsung di dalam browser
- Menyesuaikan perilaku dengan meng-override parameter fungsi
-
Profiling performa sederhana
- Mengukur waktu eksekusi kode dengan Console Timing API
- Menggunakan
console.time('label')danconsole.timeEnd('label')untuk mengukur waktu
-
Memanfaatkan aritas fungsi
- Mengaktifkan breakpoint hanya saat dipanggil dengan jumlah argumen tertentu
- Digunakan untuk menemukan ketidaksesuaian jumlah argumen saat pemanggilan fungsi
-
Memanfaatkan waktu
- Mengaktifkan breakpoint hanya setelah waktu tertentu berlalu sejak halaman dimuat
- Melewati breakpoint selama periode tertentu lalu mengaktifkannya hanya setelah itu
-
Memanfaatkan CSS
- Mengaktifkan breakpoint berdasarkan nilai CSS yang dihitung
-
Berhenti hanya pada pemanggilan genap
- Mengaktifkan breakpoint hanya pada eksekusi bernomor genap
-
Breakpoint melalui sampling
- Mengaktifkan breakpoint hanya untuk sampel eksekusi acak
-
Jangan berhenti di baris tertentu
- Menggunakan opsi "Never Pause Here" agar tidak berhenti di baris tertentu
-
Pemberian ID instance otomatis
- Secara otomatis memberikan ID unik pada setiap instance kelas
-
Toggle secara terprogram
- Menggunakan boolean global untuk men-toggle breakpoint kondisional secara terprogram
-
Pemanggilan kelas
monitor()- Menggunakan perintah
monitormilik Chrome untuk melacak pemanggilan metode kelas
- Menggunakan perintah
-
Pemanggilan fungsi dan debugging
- Memanggil fungsi setelah memanggil
debuggerdi konsol untuk melakukan debugging
- Memanggil fungsi setelah memanggil
-
Menghentikan eksekusi saat URL berubah
- Menghentikan eksekusi sebelum URL berubah pada aplikasi single-page
-
Debugging pembacaan properti
- Mengaktifkan breakpoint setiap kali properti objek dibaca
-
Menggunakan
copy()- Menggunakan Console API
copy()untuk menyalin informasi langsung ke clipboard dari browser
- Menggunakan Console API
-
Debugging HTML/CSS
- Menggunakan konsol JS untuk mendiagnosis masalah HTML/CSS
- Memeriksa DOM saat JS dinonaktifkan
- Memeriksa elemen DOM yang muncul secara kondisional
- Merekam snapshot DOM
- Memantau elemen yang sedang fokus
- Menemukan elemen dengan font tebal
- Mereferensikan elemen yang sedang dipilih
- Memantau event
Opini GN⁺
Hal terpenting dari tulisan ini adalah bahwa artikel ini memberikan berbagai teknik dan tips agar developer dapat melakukan debugging kode dan menyelesaikan masalah dengan lebih efisien menggunakan debugger browser. Informasi seperti ini sangat berguna bagi software developer, dan menarik karena dapat menghemat waktu terutama saat melacak bug yang kompleks atau menyelesaikan masalah performa.
1 komentar
Komentar Hacker News
Perkembangan alat debugging bawaan browser
Pemanfaatan pernyataan debugger
debugger;) adalah satu-satunya cara untuk mengalahkan stack rekursif di debugger Chrome.Sulitnya debugging backend NodeJS
pdb.set_trace()/IEx.pry().console.log, yang terasa primitif.Rekomendasi Werkzeug
Cara mengakses variabel lokal dalam IIFE
Metode debugging melalui string UI
Debugging dengan breakpoint kondisional
{configOption: true}menjadi{get configOption() { debugger; return true; }}.Fitur khusus Chrome 'Monitor Events for Element'
Ketiadaan API
queryObjectsqueryObjectsyang mengembalikan daftar semua objek yang dibuat dengan konstruktor tertentu.queryObjects(Function)dapat digunakan untuk mendapatkan daftar semua fungsi yang ada di heap.Sulitnya menggunakan watch variable