Android Studio IDE: перерва на виняток


138

Здається, моя Android Studio за замовчуванням не хоче перебивати жоден виняток. Увімкнення перерви на "Будь-яке виняток" починається з розбиття у фактичних бібліотеках JDE. Чи є якийсь спосіб змусити його порушуватись лише за винятками лише в межах мого коду?

Виходячи з Всесвіту Visual Studio, шукайте тут поведінку налагодження VS за замовчуванням.

Відповіді:


206

Щоб порушити всі винятки, спіймані чи не зловиті:

  1. Відкрийте вікно «Точки перерви» за допомогою пункту « Запуск» -> «Перегляд точок перерви» .
  2. З'явиться діалогове вікно "Розривні точки". На лівій панелі прокрутіть донизу. Виберіть Будь-який виняток розділі Точки зупинки Java
  3. З будь-яким вибраним винятком на правій панелі налаштуйте так:
    • Призупинити: перевірено
    • Усі: вибрано
    • Хвороба: !(this instanceof java.lang.ClassNotFoundException)
    • Повідомлення: як Caught виняток і Uncaught виняток вибрано

Діалогове вікно переривання

  1. Визначте фільтри, які задають простори імен бібліотек, на які повинен відлаштовуватися налагоджувач : Установіть прапорець Фільтри класів, щоб увімкнути фільтрацію класів ( як згадував @Scott Barta ). Потім натисніть кнопку ... (еліпсис), щоб відкрити діалогове вікно Фільтри класів. Вкажіть шаблони простору імен класів, натиснувши кнопку Додати шаблон(Додати шаблон). Введіть:
    • com.myapp.* (замініть це префіксом простору імен додатка)
    • java.* (зауважте: відповідно до запитання ОП, залишайте це, щоб НЕ порушуватись на бібліотеках Java)
    • android.* (як вище, залиште лише налагодження власного коду програми)
    • Додайте будь-які додаткові простори імен (наприклад, сторонні бібліотеки)

Фільтри класу

  1. Натисніть кнопку ОК , а потім відмініть діалогове вікно перерви.

6
@AndroidDev Це не найприємніший інтерфейс, особливо коли він використовується IDE Visual Studio. Класові фільтри повинні запобігати різного роду помилок низького рівня, щоб зупинити програму набагато частіше (особливо під час ініціалізації додатків). Наприклад, виконайте наведені вище дії, але без фільтру класів, а потім запустіть програму в режимі налагодження і подивіться, що відбувається.
CJBS

6
@AndroidDev: Я думаю, що це має сенс насправді. За замовчуванням він працює на всіх винятках. Не потрібно встановлювати умови та фільтри. Однак ОП попросив спеціально фільтрувати винятки (винятки у власному коді).
Mooing Duck

4
Як розробник xcode / iOS та android-n00b, я не знав, що для того, щоб БУДЬ будь-які точки точки прориву, в студії Android ви не можете натиснути піктограму (трикутник) для запуску програми. Потрібно запустити додаток, натиснувши на нього значок-помилку поруч із ним.
xaphod

@xaphod Інший спосіб - запустити в режимі випуску (натиснути кнопку відтворення), після чого програма запуститься, приєднайте налагоджувач (натиснувши пристрій на помилку - портретний прямокутник із зеленою помилкою в нижній правій частині значка), а потім виберіть процес налагодження. Це набагато швидше, якщо не налагоджувати будь-який код запуску програми. Дивіться: developer.android.com/tools/debugging/…
CJBS

Якщо ви користуєтеся джунітом (налагодження під час тестування одиниць), можливо, ви захочете додати фільтр класівorg.junit.*
Thomas Vincent

34

Якщо ви відкриєте вікно Breakpoints, це дає вам досить багато варіантів, щоб він умовно перервався чи ні. Тут ви шукаєте "Фільтри класів" - ви можете вказати виразний вираз за допомогою, наприклад, шляху пакету Java, і він порушиться лише для виключень, створених із відповідних класів.


4
Для всіх, хто шукає вікно «Точки розриву», його можна знайти в меню «Виконати» - «Переглянути точки прориву».
Патрік

2
Я намагаюся це зробити, але не можу змусити його працювати. Яким повинен бути фільтр класу? Можна навести кілька прикладів?
Барт Фрідеріхс

1
Я в тому ж човні - класові фільтри просто не працюють на мене. Я спробував com.mycompany. *, Але жоден з винятків не спричинив його розрив.
Килотан

Він просто зупиняється на ZygoteInit.java щоразу! Досить марно! Як це подолати ???
Рено Серрато

Виконати-> Переглянути точки перерви .... так, ми б не хотіли, щоб вікно відображалося в меню "Перегляд", чи не так!
LarryBud

7

Щоб порушити всі винятки у вашому коді та інші винятки, якщо вони не знайдені:

Цей метод фільтрує типи винятків, які час виконання виконує під час нормальної роботи (не дуже винятково, чи не так?). Він не використовує фільтр класів, оскільки він би надто фільтрував; помилки у вашому коді часто призводять до того, що класи виконання програм викидають винятки (наприклад, доступ до списку масивів минулого кінця).

  1. Увімкніть точки виключення Java ExcePoints / Будь-який виняток лише для невловимих винятків.

  2. Додайте нову виняткову програму Java Exception BreakPoint для Exception (java.lang)класу для спійманих та вилучених винятків. Увімкніть умову та встановіть це так:

        !(this instanceof java.lang.ClassNotFoundException || this instanceof android.system.ErrnoException || this instanceof java.io.FileNotFoundException || this instanceof javax.net.ssl.SSLHandshakeException || this instanceof javax.net.ssl.SSLPeerUnverifiedException || this instanceof android.system.GaiException || this instanceof java.net.SocketTimeoutException || this instanceof java.net.SocketException || this instanceof java.security.NoSuchAlgorithmException)
    

Додайте до списку виключень в умові будь-які інші не виключні винятки, з якими ви стикаєтесь. (BTW, використання java.lang.Exception- це спосіб ефективно отримати другий запис "Будь-який виняток".)


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