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..." atau users.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 😀