Fitur dan praktik debugging IDE yang dapat meningkatkan proses debug Anda
Debugging merupakan salah satu hal terpenting dalam proses pengembangan. Bukan hanya karena perbaikan bug mungkin memakan waktu paling lama, debugging juga sangat berguna selama pembuatan logika bisnis, penulisan algoritma, dan pengujian kode.
Mari kita mulai dengan dasar-dasarnya. Ada 4 jenis breakpoint di IntelliJ IDEA.
Titik henti baris
Menghentikan aplikasi ketika mencapai baris kode yang ditambahkan. Breakpoint semacam ini hanya dapat ditambahkan ke baris kode yang dapat dieksekusi. Jika baris berisi ekspresi lambda, Anda dapat memilih apakah Anda ingin menyetel breakpoint baris reguler, atau program hanya boleh dihentikan ketika lambda dipanggil.
Titik henti metode
Menghentikan aplikasi saat memasuki atau keluar dari metode yang ditentukan atau salah satu implementasinya, memungkinkan Anda memeriksa kondisi masuk/keluar dari metode. Jenis breakpoint ini dapat memperlambat proses debugging secara signifikan, jadi berhati-hatilah dan gunakan hanya saat Anda membutuhkannya.
Titik henti sementara pengecualian
Menghentikan aplikasi ketika Throwable.class
atau subkelasnya dilempar.
Pos pengawasan lapangan
Menghentikan aplikasi ketika kolom tertentu dibaca atau ditulis. Hal ini memungkinkan Anda bereaksi terhadap interaksi dengan variabel instan tertentu. Misalnya, lihat bagaimana properti diinisialisasi atau metode apa yang mengubah nilainya.
Untuk membuat breakpoint gunakan pintasan Ctrl + F8. Tergantung di mana Anda melakukan ini, breakpoint yang berbeda akan dibuat (Garis, Metode, atau Bidang).
Untuk melihat daftar semua breakpoint gunakan Ctrl + Shift + F8.
Fitur ini dapat menghemat waktu Anda. Berkat opsi ini, Anda tidak perlu mencari breakpoint dan menghapusnya secara manual jika breakpoint tersebut menghentikan eksekusi kode Anda saat Anda tidak menginginkannya. Selain itu, ini memungkinkan Anda menonaktifkan breakpoint saja. Breakpoint yang dinonaktifkan tidak akan menghentikan kode Anda selama proses debug, tetapi ketika Anda memerlukannya, Anda dapat dengan mudah mengaktifkannya kembali, sehingga Anda tidak perlu mengingat semua tempat penting dalam proyek dan setiap kali membuat dan menghapus breakpoint.
Selain itu, di jendela ini, Anda dapat mengonfigurasi semua breakpoint Anda:
Menskors
Menentukan apakah akan menghentikan eksekusi aplikasi ketika breakpoint tercapai. Memiliki dua kemungkinan nilai Semua/Utas. Jika semuadipilih, semua thread akan ditangguhkan ketika salah satu thread mencapai titik henti sementara, Jika thread, hanya thread yang mencapai breakpoint yang ditangguhkan.
Kondisi
Opsi ini memungkinkan Anda menentukan kondisi yang diperiksa setiap kali breakpoint tercapai. Jika kondisi mengembalikan nilai true, tindakan yang ditentukan akan dilakukan. Jika tidak, breakpoint akan dilewati.
Sebagai syaratnya, Anda dapat menggunakan:
- Beberapa pernyataan, termasuk deklarasi, loop, kelas anonim, dan sebagainya
this
(hanya dalam konteks nonstatis), misalnya!(this instanceof User)
- Periksa nilai atau ekspresi boolean
Opsi Pencatatan
Ketika breakpoint tercapai, hal berikut dapat dicatat ke konsol:
- Pesan “Breakpoint hit”: pesan log kepada kami
Breakpoint reached at package.User.main(User.java:10)
- Pelacakan tumpukan: pelacakan tumpukan untuk frame saat ini. Ini berguna jika Anda ingin memeriksa metode apa yang dipanggil sebelum mencapai breakpoint.
- Evaluasi dan catat: hasil ekspresi arbitrer, misalnya
"Creating..."
atauusers.size()
.
Hapus sekali tekan
Menentukan apakah breakpoint harus dihapus dari proyek setelah tercapai satu kali.
Nonaktifkan hingga mencapai breakpoint berikutnya
Menonaktifkan breakpoint saat ini hingga breakpoint yang ditentukan tercapai.
Anda juga dapat memilih apakah breakpoint harus dinonaktifkan setelah hal ini terjadi atau tidak.
Filter
JetBrains IDE memungkinkan Anda mengonfigurasi operasi breakpoint dengan memfilter kelas/instance/metode dan hanya menghentikan aplikasi jika diperlukan.
Jenis filter berikut tersedia:
- Filter kelas tangkapan: menghentikan aplikasi ketika pengecualian akan ditangkap di kelas yang ditentukan.
- Filter instance: membatasi operasi breakpoint pada instance objek tertentu.
- Filter kelas: membatasi operasi breakpoint pada kelas tertentu.
- Filter pemanggil: membatasi operasi breakpoint bergantung pada pemanggil metode saat ini. Pilih opsi ini jika Anda perlu berhenti pada breakpoint hanya ketika metode dipanggil dari metode tertentu.
Akses/modifikasi lapangan
- Akses lapangan:Pilih opsi ini untuk membuat watchpoint berfungsi saat bidang sedang dibaca.
- Modifikasi bidang:Pilih untuk membuat watchpoint berfungsi saat bidang sedang ditulis.
Jumlah kelulusan
Menentukan apakah breakpoint hanya berfungsi setelah tercapai beberapa kali tertentu. Ini berguna untuk men-debug loop atau metode rekursif.
Pengecualian tertangkap/tidak tertangkap
- Pengecualian yang tertangkap:Pilih untuk membuat breakpoint berfungsi ketika pengecualian yang ditentukan tertangkap.
- Pengecualian yang tidak tertangkap:Pilih untuk membuat breakpoint berfungsi ketika pengecualian yang ditentukan tidak tertangkap. Hal ini memungkinkan Anda mengetahui penyebab pengecualian yang tidak tertangani.
Praktik terbaik titik henti sementara
Gunakan breakpoint untuk mencatat debugging, jangan gunakan System.out.println
Gunakan logging breakpoints alih-alih menambahkan System.out.print
dalam kode Anda. Ini memberikan cara yang lebih fleksibel untuk pencatatan aplikasi Anda dan mencegah Anda dari kode kotor dan perubahan kode yang tidak disengaja di git commit.
Gunakan pintasan untuk menambahkan breakpoint, ini akan menghemat banyak waktu
Menggunakan jalan pintas merupakan perspektif yang baik untuk pembangunan yang lebih produktif. Jangan lupakan mereka.
Atur breakpoint grup
Anda dapat membuat grup breakpoint, misalnya, jika Anda perlu menandai breakpoint untuk masalah tertentu. Dalam dialog Breakpoints (Ctrl+Shift+F8), pilih breakpoint yang ingin Anda tambahkan ke dalam grup, dan pilih Pindahkan ke grup.
Cari tahu akar penyebab kesalahan fatal
Breakpoint pengecualian berfungsi dengan Throwable.class
. Anda dapat menambahkan kondisi yang akan membantu Anda menghentikan eksekusi kode hanya ketika Error.class
dilempar, atau Anda dapat mempersempitnya menjadi MyCustomException.class
.
Jangan gunakan metode breakpoint jika tidak diperlukan
Breakpoint metode dapat memperlambat eksekusi kode Anda secara signifikan, sehingga dapat menyita banyak waktu Anda.
Jangan menghapus breakpoint sepenuhnya
Jika Anda tidak memerlukan breakpoint tertentu saat ini, jangan menghapusnya sepenuhnya, Anda cukup menonaktifkannya. Ini bisa menghemat banyak waktu di masa depan ketika Anda perlu menguji blok kode yang sama, Anda tidak perlu mencarinya di proyek besar, Anda cukup mengaktifkan breakpoint yang sama sekali lagi.
Tambahkan deskripsi ke breakpoint
Ini dapat membantu Anda memahami mengapa Anda memerlukan breakpoint ini, dalam jumlah breakpoint yang banyak.
Melangkah melalui program
Melangkah ini adalah eksekusi program langkah demi langkah.
Ketika eksekusi kode berhenti pada breakpoint, Anda dapat menelusuri kode dengan berbagai jenis langkah. Anda dapat melihat panel langkah-langkah di atas.
Mari kita lihat masing-masing langkah secara lebih rinci.
Melangkah (F8)
Melangkahi baris kode saat ini dan membawa Anda ke baris berikutnya. Penerapan metode dilewati, dan Anda berpindah ke baris berikutnya dari metode saat ini.
Masuk ke (F7)
Langkah-langkah di dalam metode untuk menampilkan kode di dalamnya. Opsi ini berguna ketika Anda tidak yakin bahwa metode tersebut mengembalikan nilai yang benar.
Melangkah keluar (Shift + F8)
Keluar dari metode saat ini dan membawa Anda ke metode pemanggil.
Jalankan ke kursor (Alt + F9)
Melanjutkan eksekusi aplikasi ke posisi kursor saat ini.
Paksa melangkah (Shift+Alt+F8)
Melangkahi baris kode saat ini dan membawa Anda ke baris berikutnya. Jika ada breakpoint dalam metode yang dipanggil, maka akan diabaikan.
Jatuhkan bingkai
Ini memungkinkan Anda untuk membatalkan frame terakhir dan mengembalikan frame sebelumnya di tumpukan. Ini bisa berguna, misalnya, jika Anda tidak sengaja melangkah terlalu jauh, atau ingin memasukkan fungsi yang melewatkan blok kode penting.
Lanjutkan program (Ctrl + F9)
Melanjutkan eksekusi aplikasi Anda ke breakpoint berikutnya.
Jendela alat debug
Saat Anda memulai proses debug, jendela alat Debug akan muncul. Jendela ini digunakan untuk mengontrol sesi debugging, menampilkan dan menganalisis data program, dan melakukan berbagai tindakan debug.
Di jendela ini, Anda dapat melihat objek yang dibuat, properti, pengecualian, nilai, dll. Akan lebih mudah bila Anda ingin memastikan bahwa semua properti diinisialisasi dengan benar, metode parameter apa yang diterima, atau untuk melihat tumpukan pengecualian jejak.
Telusuri praktik terbaik program
Gunakan Step Into bahkan untuk metode dari perpustakaan eksternal
Terkadang perpustakaan eksternal juga memiliki bug. Men-debug perpustakaan eksternal dapat membantu Anda menemukan kode yang salah dan melaporkannya ke pengembang perpustakaan ini. Atau masalahnya mungkin ada pada hal lain. Jika, misalnya, suatu metode dari perpustakaan eksternal mengembalikan nilai yang tidak diharapkan, masuklah ke dalamnya, untuk mencari tahu alasan perilaku ini, itu bisa jadi karena metode objek sama dengan/kode hash/dll salah, atau mungkin beberapa kelas perpustakaan ini adalah diganti dalam proyek Anda.
Gunakan Tampilkan Titik Eksekusi
Jika Anda tersesat di tempat eksekusi kode Anda berhenti, gunakanTampilkan Titik Eksekusi (Alt + F10)untuk berpindah ke titik henti sementara yang dicapai.
Lihatlah tumpukan panggilan
Terkadang alasan perilaku tak terduga mungkin terjadi karena Anda tidak memiliki titik henti sementara. Lihatlah tumpukan panggilan, untuk melihat metode apa yang dijalankan, ini dapat membantu Anda menemukan metode yang salah. Selain itu, jika Anda menavigasi ke metode lain melalui tumpukan panggilan, Anda dapat melihat parameter apa yang diterima metode ini sebelumnya.
Evaluasi ekspresi
Selain itu, IntelliJ IDEA memungkinkan Anda mengevaluasi ekspresi pada breakpoint. Ini adalah cara yang sangat mudah untuk melihat bagaimana metode berperilaku dengan nilai-nilai lain.
Untuk mengevaluasi ekspresi gunakan tombol Alt + F8 atau Evaluasi.
Mengevaluasi praktik terbaik
Evaluasi semuanya
Jika Anda perlu menguji metode Anda dengan nilai yang berbeda, jangan membuat objek secara manual dan memulai ulang aplikasi, Anda dapat mengevaluasi metode dengan nilai ini, ini dapat menghemat banyak waktu, dan juga, Anda akan melihat semua properti dari metode tersebut. objek yang dikembalikan.
Evaluator dapat mengeksekusi semuanya
IntelliJ IDEA memungkinkan Anda mengevaluasi tidak hanya metode lokal Anda tetapi juga metode eksternal atau java.*
yang berbeda. Evaluator bahkan dapat mengeksekusi metode yang mengirimkan permintaan ke layanan lain, sehingga Anda dapat melihat respons detailnya.
Hati-hati dengan Stream
Jika Anda membacakan aliran Anda sekali di evaluator, aliran tersebut dianggap telah dibaca, sehingga mungkin menyebabkan kesalahan jika aplikasi Anda mencoba membacanya sekali lagi.
Debbunging terkadang merupakan proses yang menjengkelkan dan berlarut-larut, namun sangat diperlukan bagi setiap pengembang. Dan IntelliJ IDEA menyediakan fitur dan pilihan yang membuatnya lebih nyaman, mudah, dan produktif. Kita bisa suka atau tidak suka melakukan debug, tapi ini adalah hal yang membutuhkan sebagian besar pengembangan.
Dan pada akhirnya amalan yang paling krusial
Lupakan tombol Jalankan, gunakan hanya Debug jika Anda seorang pengembang 😀