Чи є "Перерва на виняток" в IntelliJ?


318

Чи є функція, яка автоматично порушує налагодження при появі першого винятку?

Так ми

  1. запустити додаток
  2. робити щось, що кидає виняток
  3. отримав IntelliJ виділену виділену лінію, де сталося виключення.

Ви, мабуть, хочете перерватися лише на неприховані винятки, правда?
Девід Ференчі Рогожан

Відповіді:


367

Виконати | Переглянути точки перерви | Виключення Точки перерви


На жаль, я виявив, що на практиці (з великими даними) змінні кадру, які вам цікаві, не завжди завантажуються.
information_interchange

158

Швидкий спосіб спливати діалогове вікно - натиснути Ctrl+ SHIFT+ F8(на Mac: Cmd+ SHIFT+ F8), а потім перейти на вкладку точок перерви винятку. Якщо це була остання вкладка, яку ви переглядали, вона все одно буде обрана, що дозволяє легко перемикати перерви на винятки, включаючи та вимикаючи.

Це призведе до того, що IntelliJ зламається в точці коду (або бібліотечного коду), де було піднято виняток. Зокрема, ви отримуєте "перший шанс" при обробці винятків, перш ніж стек буде пройдено, шукаючи лову / нарешті блоки для виконання.


Порада: Java, як правило, кидає багато винятків внутрішньо під час завантаження класів, тож цей перелом на всі винятки може стати досить стомлюючим. Хороша новина полягає в тому, що ви можете виключити певні типи виключень, використовуючи поле умови .

Наприклад:

!(this instanceof java.lang.ClassNotFoundException)

Ви можете поєднати кілька таких умов разом із &&.

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


9
Чи є спосіб сказати "перерва на винятки лише з мого проекту (не з системи Java)"?
Чортові овочі

16
Не забувайте "Інваліди, поки не потрапили вибрані точки перерви:" - це дивовижно. Просто встановіть точку перерви у вашому коді після завантаження та налаштування всіх Java або інших бібліотек. Потім виберіть точку перерви зі спадного меню та зачекайте. Ваша точка розриву буде вдарена, і після того, як ви продовжите, ваш новий фільтр Caught & Uncaught Exception запуститься. :)
Louis St-Amour

1
Не забудьте встановити прапорець "Виконаний виняток" та "Невизначений виняток" внизу діалогового вікна "Межі переривання".
Робіно

59

У IntelliJ IDEA 14 перейдіть до:

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

Якщо ви не знімете позначку, Caught Exceptionsвиконання буде припинено кожного разу, коли Java Frameworkвикидає внутрішній виняток.


1
Виконати -> Переглянути точки точок перерви ... -> Поставити прапорець "
Jonas

2
На жаль, це все ще порушується для спійманих винятків, навіть після відключення "спійманих виключень".
Carcigenicate

Я б сказав, що це дуже важлива інформація, інакше це пекло винятку без інформаційного значення. В основному при використанні великих каркасів, як Grails.
Девід Ференчі Рогожан

Гаразд, я передумав - обидва варіанти, з винятками та без них, є поганими, тому що зазвичай у типовому веб-додатку всі винятки використовуються для вилову, є блок вищого рівня, який охоплює все та форматує його. представлені користувачеві. Тож без спійманих винятків він не порушує нічого, а з ними він сторично розривається за один запит. Обидва марно :(
Девід Ференчі Рогожан

Ніщо не марне, якщо ви знаєте, як ним користуватися.
Алессандро Флаті

12

Так, є. Потрібно визначити точку розриву винятку (це може бути "Будь-який виняток") у діалоговому вікні "точки перерви" в IntelliJ IDEA.

Винятки можуть бути відфільтровані за умовами чи класом за бажанням, або за тим, чи цікавляться ви спійманими чи неприхованими винятками.


7

Якщо натиснути на маленький знак "+" у верхньому лівому куті, ви можете додати нову точку розриву. Якщо ви виберете пункт «Точка перерви у винятку», ви отримаєте невелике діалогове вікно, де ви можете ввести клас винятків, на який потрібно перерватися (якщо ви не хочете перерватися на всі винятки).


0

У новіших версіях на intellij в розділі Виконати > Переглянути точки перерви .

Потім встановіть прапорець Точки зупинки винятку Java -> Будь-яке виключення .

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

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

ПД. відповідь додана лише для того, щоб вказати на досить корисний фільтр класу Catch .

Точки прориву

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.