Czy jest funkcja, która automatycznie przerwie debugowanie przy pierwszym wystąpieniu wyjątku?
Więc my
- uruchom aplikację
- zrób coś, co spowoduje wyjątek
- wyskoczył podświetlony wiersz IntelliJ, w którym wystąpił wyjątek.
Czy jest funkcja, która automatycznie przerwie debugowanie przy pierwszym wystąpieniu wyjątku?
Więc my
Odpowiedzi:
Uruchom | Wyświetl punkty przerwania | Wyjątki Punkty przerwania
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 &&
.
W IntelliJ IDEA 14 przejdź do:
Run -> View Breakpoints -> Check "Java Exceptions Breakpoints" -> Uncheck "Caught Exceptions"
Jeśli nie usuniesz zaznaczenia, Caught Exceptions
wykonanie zostanie zatrzymane za każdym razem, gdy Java Framework
zgłosi wyjątek wewnętrzny.
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 .