Gibt es in IntelliJ „Break on Exception“?

318

Gibt es eine Funktion, die das Debuggen beim Auftreten der ersten Ausnahme automatisch unterbricht?

Also wir

  1. Anwendung starten
  2. Mach etwas, das eine Ausnahme auslöst
  3. IntelliJ hat eine hervorgehobene Zeile angezeigt, in der eine Ausnahme aufgetreten ist.
Mike Chaliy
quelle
Sie möchten wahrscheinlich nur mit nicht erfassten Ausnahmen brechen, oder?
David Ferenczy Rogožan

Antworten:

367

Führen Sie | aus Haltepunkte anzeigen | Ausnahme-Haltepunkte

Mike Chaliy
quelle
Leider habe ich festgestellt, dass in der Praxis (mit großen Datenmengen) die Frame-Variablen, die Sie interessieren, nicht immer geladen werden.
information_interchange
158

Eine schnelle Möglichkeit, das Dialogfeld aufzurufen, besteht darin, Ctrl+ SHIFT+ F8(auf Mac: Cmd+ SHIFT+ F8) zu drücken und dann auf die Registerkarte Ausnahme-Haltepunkte zu klicken. Wenn dies die letzte Registerkarte war, die Sie angezeigt haben, wird sie weiterhin ausgewählt, sodass Sie die Unterbrechung bei Ausnahmen einfach ein- und ausschalten können.

Dies führt dazu, dass IntelliJ an der Stelle im Code (oder Bibliothekscode) unterbrochen wird, an der die Ausnahme ausgelöst wurde. Insbesondere erhalten Sie eine erste Chance bei der Ausnahmebehandlung, bevor der Stapel nach Catch / finally-Blöcken durchsucht wird, die ausgeführt werden sollen.


TIPP: Java neigt dazu, beim Laden von Klassen intern viele Ausnahmen auszulösen, sodass das Brechen aller Ausnahmen ziemlich mühsam werden kann. Die gute Nachricht ist, dass Sie bestimmte Arten von Ausnahmen über das Bedingungsfeld ausschließen können.

Zum Beispiel:

!(this instanceof java.lang.ClassNotFoundException)

Sie können mehrere solcher Bedingungen mit verketten &&.

Geben Sie hier die Bildbeschreibung ein

Drew Noakes
quelle
9
Gibt es eine Möglichkeit zu erkennen, dass "nur Ausnahmen von meinem Projekt (nicht vom Java-System) unterbrochen werden"?
Verdammtes Gemüse
16
Vergessen Sie nicht "Deaktiviert, bis der ausgewählte Haltepunkt erreicht ist:" - dieser ist erstaunlich. Setzen Sie einfach einen Haltepunkt in Ihrem Code, nachdem alle Java- oder anderen Bibliotheken geladen und eingerichtet wurden. Wählen Sie dann Ihren Haltepunkt aus der Dropdown-Liste und warten Sie. Ihr Haltepunkt wird erreicht, und sobald Sie fortfahren, wird Ihr neuer Filter für gefangene und nicht gefangene Ausnahmen aktiviert. :)
Louis St-Amour
1
Vergessen Sie nicht, sowohl "Gefangene Ausnahme" als auch "Nicht gefangene Ausnahme" unten im Dialogfeld "Haltepunkte" zu aktivieren.
Robino
58

In IntelliJ IDEA 14 gehen Sie zu:

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

Wenn Sie das Kontrollkästchen nicht deaktivieren, wird Caught Exceptionsdie Ausführung jedes Mal gestoppt, wenn Java Frameworkeine interne Ausnahme ausgelöst wird .

Tonatio
quelle
1
Ausführen -> Haltepunkte anzeigen ... -> "Java-Ausnahme-Haltepunkte" aktivieren -> "Gefangene Ausnahmen" deaktivieren
Jonas
2
Leider bricht dies bei abgefangenen Ausnahmen für mich immer noch ab, selbst nachdem "abgefangene Ausnahmen" deaktiviert wurden.
Carcigenicate
Dies ist eine sehr wichtige Information, die ich sagen würde, ansonsten ist es eine Ausnahme Hölle ohne Informationswert. Hauptsächlich bei Verwendung großer Frameworks wie Grails.
David Ferenczy Rogožan
OK, ich habe meine Meinung geändert - beide Optionen mit und ohne abgefangene Ausnahmen sind schlecht, da in einer typischen Webanwendung normalerweise alle Ausnahmen abgefangen werden. Es gibt einen Catch-Block der obersten Ebene, der alles abfängt und formatiert dem Benutzer präsentiert. Ohne die abgefangenen Ausnahmen bricht es also bei nichts, bei ihnen bricht es hundertmal während einer einzelnen Anfrage. Beide nutzlos :(
David Ferenczy Rogožan
Nichts ist nutzlos, wenn Sie wissen, wie man es benutzt.
Alessandro Flati
12

Ja da ist. Sie müssen im Dialogfeld "Haltepunkte" in IntelliJ IDEA einen Ausnahme-Haltepunkt definieren (dies kann "Beliebige Ausnahme" sein).

Die Ausnahmen können bei Bedarf nach Bedingung oder Klasse gefiltert werden oder danach, ob Sie an abgefangenen oder nicht erfassten Ausnahmen interessiert sind.

Avi
quelle
7

Wenn Sie auf das kleine "+" - Zeichen in der oberen linken Ecke klicken, können Sie einen neuen Haltepunkt hinzufügen. Wenn Sie Ausnahme-Haltepunkt auswählen, wird ein kleines Dialogfeld angezeigt, in dem Sie die Ausnahmeklasse eingeben können, für die die Unterbrechung unterbrochen werden soll (falls Sie nicht alle Ausnahmen unterbrechen möchten).

koljaTM
quelle
0

In neueren Versionen von Intellij unter Ausführen > Haltepunkte anzeigen .

Aktivieren Sie dann Java Exception Breakpoints -> Any Exception .

Eine gute Möglichkeit, die Ausnahmen zu debuggen, besteht darin, Ihr Haupt-App-Paket und den Platzhalter zu verwenden .*. Auf diese Weise überspringen Sie alle anderen Bibliotheksausnahmen, da Sie meistens nach Ausnahmen suchen, die von Ihrer App und nicht von einer anderen Bibliothek ausgelöst werden (was viele Ausnahmen sein kann).

Als Beispiel in dem Bild gezeigt, das ich benutze com.gs.mercury.* jedes Mal, wenn die App eine Ausnahme auslöst. Wenn Sie Ausnahmen für das verwenden, wofür sie bestimmt sind (um Ausnahmefälle zu behandeln und nicht um den Fluss normaler Situationen zu behandeln), werden Sie nur dann anhalten, wenn Sie fast immer die gewünschte Ausnahme erreichen.

PD. Antwort hinzugefügt, nur um auf den ziemlich nützlichen Catch-Klassenfilter hinzuweisen .

Haltepunkte

Jose Da Silva
quelle