C'è "Break on Exception" in IntelliJ?


318

Esiste una funzione che interromperà automaticamente il debug alla prima occorrenza dell'eccezione?

Quindi noi

  1. avvia l'applicazione
  2. fare qualcosa che generi un'eccezione
  3. IntelliJ ha spuntato la linea evidenziata dove si è verificata un'eccezione.

Probabilmente vuoi rompere solo su eccezioni non rilevate, giusto?
David Ferenczy Rogožan,

Risposte:


367

Esegui | Visualizza i punti di interruzione | Breakpoint di eccezione


Sfortunatamente, ho scoperto che in pratica (con dati di grandi dimensioni), le variabili di frame che ti interessano non sempre caricano.
information_interchange

158

Un modo rapido per visualizzare la finestra di dialogo è premere Ctrl+ SHIFT+ F8(su Mac: Cmd+ SHIFT+ F8), quindi fare clic sulla scheda dei punti di interruzione delle eccezioni. Se questa era l'ultima scheda che stavi visualizzando, sarà comunque selezionata, rendendo più semplice sfogliare l'attivazione e la disattivazione delle eccezioni.

Ciò causerà l'interruzione di IntelliJ nel punto del codice (o codice libreria) in cui è stata sollevata l'eccezione. In particolare, si ottiene una "prima possibilità" nella gestione delle eccezioni, prima che lo stack venga guidato alla ricerca di blocchi catch / finally da eseguire.


SUGGERIMENTO: Java tende a generare molte eccezioni internamente durante il caricamento delle classi, quindi l'interruzione di tutte le eccezioni può diventare noiosa. La buona notizia è che è possibile escludere determinati tipi di eccezione utilizzando il campo condizione .

Per esempio:

!(this instanceof java.lang.ClassNotFoundException)

È possibile concatenare più di tali condizioni insieme a &&.

inserisci qui la descrizione dell'immagine


9
C'è un modo per dire "interrompere le eccezioni solo dal mio progetto (non dal sistema Java)"?
Damn Vegetables

16
Non dimenticare "Disabilitato finché non viene raggiunto il punto di interruzione selezionato:" - questo è sorprendente. Basta impostare un punto di interruzione nel codice dopo che tutte le librerie Java o altre sono state caricate e configurate. Quindi seleziona il punto di interruzione dal menu a discesa e attendi. Il tuo punto di interruzione verrà colpito e, una volta colpito, continuerà a scattare il tuo nuovo filtro Eccezione catturati e non rilevati. :)
Louis St-Amour,

1
Non dimenticare di selezionare sia "Eccezione rilevata" che "Eccezione non rilevata" nella parte inferiore della finestra di dialogo Punti di interruzione.
Robino,

59

In IntelliJ IDEA 14 vai a:

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

Se non deselezioni, Caught Exceptionsl'esecuzione verrà interrotta ogni volta che Java Frameworkgenera un'eccezione interna.


1
Esegui -> Visualizza breakpoint ... -> Seleziona "Java Exceptions Breakpoints" -> Deseleziona "Caught Exceptions"
Jonas

2
Sfortunatamente, questo continua a rompere le eccezioni rilevate per me, anche dopo aver disabilitato le "eccezioni rilevate".
Carcigenicato,

Questa è un'informazione molto importante che direi, altrimenti è un'eccezione senza valore informativo. Principalmente quando si utilizzano grandi framework come Grails.
David Ferenczy Rogožan,

OK, ho cambiato idea: entrambe le opzioni, con e senza eccezioni rilevate, sono male, perché di solito, in una tipica applicazione Web, tutte le eccezioni devono essere catturate, c'è un blocco di cattura di livello superiore che cattura tutto e lo formatta presentato all'utente. Quindi, senza le eccezioni rilevate, non si rompe su nulla, con loro si rompe centinaia di volte durante una singola richiesta. Entrambi inutili :(
David Ferenczy Rogožan,

Niente è inutile, se sai come usarlo.
Alessandro Flati,

12

Si C'è. È necessario definire un punto di interruzione dell'eccezione (può essere "Qualsiasi eccezione") nella finestra di dialogo dei punti di interruzione in IntelliJ IDEA.

Le eccezioni possono essere filtrate per condizione o classe, se lo si desidera, o se si è interessati a eccezioni catturate o non rilevate.


7

Se fai clic sul piccolo segno "+" nell'angolo in alto a sinistra, puoi aggiungere un nuovo punto di interruzione. Se si seleziona Breakpoint eccezioni, viene visualizzata una piccola finestra di dialogo in cui è possibile immettere la classe di eccezioni da interrompere (nel caso in cui non si desideri interrompere tutte le eccezioni).


0

Nelle versioni più recenti su intellij in Esegui > Visualizza punti di interruzione .

Quindi controllare i punti di interruzione delle eccezioni Java -> Qualsiasi eccezione .

Un buon modo per eseguire il debug delle eccezioni è utilizzare il pacchetto dell'app principale e il carattere jolly .*. In questo modo salti tutte le altre eccezioni delle librerie, poiché la maggior parte delle volte stai cercando eccezioni generate dalla tua app e non da altre librerie (che possono essere molte eccezioni).

Come un esempio mostrato nell'immagine che uso com.gs.mercury.*per rompere ogni volta che l'app genera un'eccezione. Se utilizzi le eccezioni per ciò a cui servono (per gestire casi eccezionali e non per gestire il flusso di situazioni normali), ti fermerai solo quando raggiungi l'eccezione desiderata quasi sempre.

PD. risposta aggiunta solo per sottolineare il filtro della classe Catch piuttosto utile .

I punti di interruzione

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.