Есть ли в IntelliJ «Перерыв на исключение»?

318

Есть ли функция, которая автоматически прервет отладку при возникновении первого исключения?

Итак, мы

  1. запустить приложение
  2. сделать что-то, что бросить исключение
  3. получил IntelliJ выскочил выделенную строку, где произошло исключение.
Майк Чалий
источник
Вы, вероятно, хотите использовать только неисследованные исключения, верно?
Дэвид Ференци Рогожан

Ответы:

367

Запустить | Посмотреть точки останова | Точки останова

Майк Чалий
источник
К сожалению, я обнаружил, что на практике (с большими данными) переменные кадра, которые вас интересуют, не всегда загружаются.
информационный
158

Быстрый способ открыть диалоговое окно - нажать Ctrl+ SHIFT+ F8(на Mac: Cmd+ SHIFT+ F8), а затем перейти на вкладку точек прерывания исключений. Если это была последняя вкладка, которую вы просматривали, она все равно будет выбрана, чтобы легко включать и выключать исключения.

Это приведет к разрыву IntelliJ в той точке кода (или кода библиотеки), где возникло исключение. В частности, вы получаете «первый шанс» при обработке исключений до того, как стек будет проходить в поисках блоков catch / finally для выполнения.


СОВЕТ: Java имеет тенденцию вызывать много исключений внутри при загрузке классов, так что это нарушение всех исключений может стать довольно утомительным. Хорошей новостью является то, что вы можете исключить определенные типы исключений, используя поле условия .

Например:

!(this instanceof java.lang.ClassNotFoundException)

Вы можете связать несколько таких условий вместе с &&.

введите описание изображения здесь

Дрю Ноакс
источник
9
Есть ли способ сказать, "сломать исключения только из моего проекта (не из системы Java)"?
Чертовы овощи
16
Не забывайте «Отключено, пока не будет достигнута выбранная точка останова:» - это удивительно. Просто установите точку останова в вашем коде после того, как все Java или другие библиотеки были загружены и настроены. Затем выберите точку останова из выпадающего списка и подождите. Ваша точка останова будет достигнута, а затем, как только вы нажмете «Продолжить», сработает ваш новый фильтр «Пойманные и необученные исключения». :)
Louis St-Amour
1
Не забудьте проверить и «Пойманная исключительная ситуация», и «Пойманная исключительная ситуация» в нижней части диалогового окна Точки останова.
Робиньо
59

В IntelliJ IDEA 14 перейдите по ссылке :

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

Если вы не снимите флажок, Caught Exceptionsвыполнение будет останавливаться каждый раз, когда Java Frameworkвыдается внутреннее исключение.

Tonatio
источник
1
Выполнить -> Просмотреть точки останова ... -> Отметить «Точки останова исключений Java» -> Снять отметку «Пойманные исключения»
Jonas
2
К сожалению, это по-прежнему нарушает отслеживаемые исключения для меня, даже после отключения «пойманных исключений».
Carcigenicate
Это очень важная информация, я бы сказал, в противном случае, это ад исключений без какой-либо информационной ценности. В основном при использовании больших фреймворков, таких как Grails.
Дэвид Ференци Рогожан
ОК, я передумал - оба варианта, с и без перехваченных исключений, плохие, потому что обычно в типичном веб-приложении все исключения используются для перехвата, есть блок перехвата верхнего уровня, который перехватывает все и форматирует его так, чтобы он был представленный пользователю. Таким образом, без перехваченных исключений он ни на что не ломается, с ними он ломается сотни раз за один запрос. Оба бесполезны :(
Давид Ференци Рогожан
Нет ничего бесполезного, если ты умеешь им пользоваться.
Алессандро Флати
12

Да, есть. Вам необходимо определить точку останова исключения (это может быть «Любое исключение») в диалоге точек останова в IntelliJ IDEA.

Исключения могут быть отфильтрованы по условию или классу, если это необходимо, или по тому, заинтересованы ли вы в обнаруженных или необнаруженных исключениях.

Avi
источник
7

Если вы нажмете на маленький знак «+» в верхнем левом углу, вы можете добавить новую точку останова. Если вы выберете Exception Breakpoint, вы получите небольшое диалоговое окно, в котором вы можете ввести класс исключений для разрыва (в случае, если вы не хотите разбивать все исключения).

koljaTM
источник
0

В новых версиях на intellij в под Run > View Breakpoints .

Затем проверьте точки останова исключений Java -> Любое исключение .

Хороший способ отладки исключений - использовать основной пакет приложения и подстановочный знак .*. Таким образом вы пропускаете все исключения из других библиотек, поскольку в большинстве случаев вы ищете исключения, генерируемые вашим приложением, а не какой-либо другой библиотекой (что может быть большим количеством исключений).

Как показано на рисунке, который я использую, com.gs.mercury.*чтобы ломать каждый раз, когда приложение выдает исключение. Если вы используете исключения для того, для чего они предназначены (для обработки исключительных случаев, а не для обработки потока нормальных ситуаций), вы остановитесь, только когда достигнете желаемого исключения почти все время.

Оплаченный добавлен ответ, чтобы указать на довольно полезный фильтр классов Catch .

Контрольные точки

Хосе да Силва
источник