Apakah ada "Break on Exception" di IntelliJ?

318

Apakah ada fitur yang secara otomatis akan menghentikan debugging pada kejadian pengecualian pertama?

Jadi kita

  1. mulai aplikasi
  2. lakukan sesuatu yang melempar pengecualian
  3. IntelliJ muncul garis yang disorot di mana pengecualian terjadi.
Mike Chaliy
sumber
Anda mungkin ingin melanggar pengecualian saja, kan?
David Ferenczy Rogožan

Jawaban:

367

Jalankan | Lihat Breakpoints | Breakpoint Pengecualian

Mike Chaliy
sumber
Sayangnya, saya telah menemukan bahwa dalam praktiknya (dengan data besar), variabel frame yang Anda pedulikan tidak selalu dimuat.
information_interchange
158

Cara cepat untuk memunculkan dialog adalah dengan menekan Ctrl+ SHIFT+ F8(Pada Mac: Cmd+ SHIFT+F8 ), lalu klik ke tab breakpoint pengecualian. Jika itu adalah tab terakhir yang Anda lihat, itu masih akan dipilih, membuatnya mudah untuk menjentikkan pada pengecualian aktif dan nonaktif.

Ini akan menyebabkan IntelliJ memecah pada titik dalam kode (atau kode pustaka) di mana pengecualian muncul. Secara khusus, Anda mendapatkan 'peluang pertama' pada penanganan pengecualian, sebelum tumpukan berjalan mencari tangkapan / akhirnya blok untuk dieksekusi.


TIP: Java cenderung membuang banyak pengecualian secara internal saat memuat kelas, jadi melanggar semua pengecualian ini bisa menjadi sangat membosankan. Berita baiknya adalah Anda dapat mengecualikan beberapa jenis pengecualian menggunakan bidang kondisi .

Sebagai contoh:

!(this instanceof java.lang.ClassNotFoundException)

Anda dapat menggabungkan beberapa kondisi seperti itu bersama &&.

masukkan deskripsi gambar di sini

Drew Noakes
sumber
9
Apakah ada cara untuk mengatakan "hentikan pengecualian dari proyek saya saja (bukan dari sistem Java)"?
Damn Vegetables
16
Jangan lupa "Dinonaktifkan sampai breakpoint yang dipilih terkena:" - yang ini luar biasa. Cukup atur breakpoint dalam kode Anda setelah semua Java atau pustaka lainnya telah dimuat dan diatur. Kemudian pilih breakpoint Anda dari dropdown dan tunggu. Breakpoint Anda akan mengenai, dan kemudian setelah Anda menekan terus, filter Caught & Uncaught Exception baru Anda akan masuk. :)
Louis St-Amour
1
Jangan lupa untuk memeriksa "Pengecualian tertangkap" dan "Pengecualian tidak tertangkap" di bagian bawah kotak dialog Breakpoints.
Robino
59

Di IntelliJ IDEA 14, buka:

Run -> View Breakpoints -> Check "Java Exceptions Breakpoints" -> Uncheck "Caught Exceptions"

Jika Anda tidak hapus centang Caught Exceptions, eksekusi akan dihentikan setiap kali Java Frameworkada pengecualian internal.

Tonatio
sumber
1
Jalankan -> Lihat Breakpoints ... -> Centang "Java Exception Breakpoints" -> Hapus centang "Exception Tertangkap"
Jonas
2
Sayangnya, ini masih melanggar pengecualian yang tertangkap untuk saya, bahkan setelah menonaktifkan "pengecualian yang tertangkap".
Carcigenicate
Ini adalah informasi yang sangat penting yang akan saya katakan, jika tidak, ini adalah pengecualian neraka tanpa nilai informasi. Terutama saat menggunakan kerangka kerja besar seperti Grails.
David Ferenczy Rogožan
OK, saya telah berubah pikiran - kedua opsi, dengan dan tanpa pengecualian yang ditangkap adalah buruk, karena biasanya, dalam aplikasi web biasa, semua pengecualian digunakan untuk ditangkap, ada blok tangkapan tingkat atas yang menangkap segala sesuatu dan memformatnya menjadi disajikan kepada pengguna. Jadi tanpa pengecualian yang ditangkap, itu tidak merusak apa pun, dengan mereka, itu rusak ratusan kali selama satu permintaan. Keduanya tidak berguna :(
David Ferenczy Rogožan
Tidak ada yang sia-sia, jika Anda tahu cara menggunakannya.
Alessandro Flati
12

Ya ada. Anda perlu menentukan breakpoint pengecualian (bisa berupa "Pengecualian") dalam dialog breakpoints di IntelliJ IDEA.

Pengecualian dapat disaring berdasarkan kondisi atau kelas jika diinginkan, atau apakah Anda tertarik dengan pengecualian yang tertangkap atau tidak.

Avi
sumber
7

Jika Anda mengklik tanda "+" kecil di sudut kiri atas, Anda dapat menambahkan breakpoint baru. Jika Anda memilih Exception Breakpoint, Anda mendapatkan sedikit dialog di mana Anda bisa masuk ke kelas pengecualian untuk istirahat (jika Anda tidak ingin istirahat pada semua pengecualian).

koljaTM
sumber
0

Dalam versi yang lebih baru di intellij di bawah Run > View Breakpoints .

Kemudian periksa Java Exception Breakpoints -> Any Exception .

Cara yang baik untuk men-debug pengecualian adalah dengan menggunakan paket aplikasi utama Anda dan kartu liar .*. Dengan cara ini Anda melewatkan semua pengecualian perpustakaan lain, karena sebagian besar waktu Anda mencari pengecualian yang dilemparkan oleh aplikasi Anda dan bukan oleh perpustakaan lain (yang bisa menjadi banyak pengecualian).

Sebagai contoh ditunjukkan pada gambar yang saya gunakan com.gs.mercury.*untuk istirahat setiap kali aplikasi melempar pengecualian. Jika Anda menggunakan pengecualian untuk apa fungsinya (untuk menangani kasus luar biasa dan tidak menangani aliran situasi normal), Anda hanya akan berhenti ketika Anda mencapai pengecualian yang diinginkan hampir sepanjang waktu.

PD Jawabannya ditambahkan hanya untuk menunjukkan filter kelas Catch yang cukup berguna .

Breakpoints

Jose Da Silva
sumber