Czy w IntelliJ jest „Break on Exception”?


318

Czy jest funkcja, która automatycznie przerwie debugowanie przy pierwszym wystąpieniu wyjątku?

Więc my

  1. uruchom aplikację
  2. zrób coś, co spowoduje wyjątek
  3. wyskoczył podświetlony wiersz IntelliJ, w którym wystąpił wyjątek.

Prawdopodobnie chcesz przełamać tylko nie wyłapane wyjątki, prawda?
David Ferenczy Rogožan

Odpowiedzi:


367

Uruchom | Wyświetl punkty przerwania | Wyjątki Punkty przerwania


Niestety, odkryłem, że w praktyce (przy dużych danych) zmienne ramki, które są dla Ciebie ważne, nie zawsze ładują się.
information_interchange

158

Szybkim sposobem wyświetlenia okna dialogowego jest naciśnięcie Ctrl+ SHIFT+ F8(na Macu: Cmd+ SHIFT+ F8), a następnie kliknięcie karty wyjątków. Jeśli była to ostatnia karta, którą przeglądałeś, nadal będzie zaznaczona, dzięki czemu będziesz mógł łatwo łamać i wyłączać wyjątki.

Spowoduje to uszkodzenie IntelliJ w punkcie kodu (lub kodu biblioteki), w którym zgłoszono wyjątek. Konkretnie, dostajesz „pierwszą szansę” na obsługę wyjątków, zanim stos zostanie sprawdzony w poszukiwaniu bloków catch / wreszcie do wykonania.


WSKAZÓWKA: Java ma tendencję do rzucania wielu wyjątków wewnętrznie podczas ładowania klas, więc łamanie wszystkich wyjątków może być dość nudne. Dobrą wiadomością jest to, że można wykluczyć niektóre typy wyjątków za pomocą pola warunku .

Na przykład:

!(this instanceof java.lang.ClassNotFoundException)

Możesz połączyć wiele takich warunków razem z &&.

wprowadź opis zdjęcia tutaj


9
Czy istnieje sposób, aby powiedzieć „przerwij tylko wyjątki od mojego projektu (nie od systemu Java)”?
Cholerne warzywa

16
Nie zapomnij o „Wyłączone, dopóki wybrany punkt przerwania nie zostanie trafiony:” - ten jest niesamowity. Wystarczy ustawić punkt przerwania w kodzie po załadowaniu i skonfigurowaniu wszystkich bibliotek Java lub innych bibliotek. Następnie wybierz punkt przerwania z listy rozwijanej i poczekaj. Twój punkt przerwania zostanie trafiony, a następnie, gdy klikniesz dalej, pojawi się nowy filtr Caught & Uncaught Exception. :)
Louis St-Amour,

1
Nie zapomnij zaznaczyć zarówno „Złapanego wyjątku”, jak i „Nieprzechwyconego wyjątku” u dołu okna dialogowego Punkty przerwania.
Robino

59

W IntelliJ IDEA 14 przejdź do:

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

Jeśli nie usuniesz zaznaczenia, Caught Exceptionswykonanie zostanie zatrzymane za każdym razem, gdy Java Frameworkzgłosi wyjątek wewnętrzny.


1
Uruchom -> Wyświetl punkty przerwania ... -> Zaznacz „Punkty wyjątków Java” -> Odznacz „Złapane wyjątki”
Jonas

2
Niestety, nadal dotyczy to wychwyconych wyjątków, nawet po wyłączeniu „przechwyconych wyjątków”.
Carcigenicate

To bardzo ważna informacja, powiedziałbym, w przeciwnym razie jest to piekło wyjątkowe bez wartości informacyjnej. Głównie przy użyciu dużych ram, takich jak Grails.
David Ferenczy Rogožan

OK, zmieniłem zdanie - obie opcje, z przechwyconymi wyjątkami i bez nich, są złe, ponieważ zwykle w typowej aplikacji internetowej wszystkie wyjątki są wychwytywane, istnieje blok przechwytujący najwyższego poziomu, który łapie wszystko i formatuje przedstawione użytkownikowi. Więc bez złapanych wyjątków, nic się nie psuje, a wraz z nimi łamie się setki razy podczas jednego żądania. Oba są bezużyteczne :(
David Ferenczy Rogožan

Nic nie jest bezużyteczne, jeśli wiesz, jak go używać.
Alessandro Flati,

12

Tak jest. Musisz zdefiniować punkt przerwania wyjątku (może to być „Dowolny wyjątek”) w oknie dialogowym punktów przerwania w IntelliJ IDEA.

Wyjątki można filtrować według warunku lub klasy, jeśli jest to pożądane, lub według tego, czy interesują Cię wyjątki wyłapane lub nieprzyjęte.


7

Jeśli klikniesz mały znak „+” w lewym górnym rogu, możesz dodać nowy punkt przerwania. Jeśli wybierzesz punkt przerwania wyjątku, pojawi się małe okno dialogowe, w którym możesz wprowadzić klasę wyjątków do złamania (w przypadku, gdy nie chcesz łamać wszystkich wyjątków).


0

W nowszych wersjach na Intellij w Run > View Breakpoints .

Następnie sprawdź Punkty przerwania wyjątków Java -> Dowolny wyjątek .

Dobrym sposobem na debugowanie wyjątków jest użycie głównego pakietu aplikacji i dzikiej karty .* . W ten sposób pomijasz wszystkie inne wyjątki bibliotek, ponieważ w większości przypadków szukasz wyjątków zgłaszanych przez aplikację, a nie przez inną bibliotekę (może to być wiele wyjątków).

Jako przykład pokazany na obrazku, którego używam com.gs.mercury.* do łamania za każdym razem, gdy aplikacja zgłasza wyjątek. Jeśli użyjesz wyjątków od tego, do czego służą (aby poradzić sobie z wyjątkowymi przypadkami i nie poradzić sobie z przepływem normalnych sytuacji), zatrzymasz się tylko wtedy, gdy prawie przez cały czas osiągniesz pożądany wyjątek.

PD. dodano odpowiedź, aby wskazać całkiem użyteczny filtr klasy Catch .

Punkty przerwania

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.