Android Studio IDE: перерыв на исключении

Кажется, моя Android-студия не хочет прерывать какое-либо исключение по умолчанию. Включение разрыва "Любое исключение" начинает ломаться в реальных библиотеках JDE. Есть ли способ заставить его разбиться только на исключения из моего кода?

Переход из юниверса Visual Studio, ища здесь поведение отладки VS по умолчанию.

Ответ 1

Чтобы разбить все исключения, поймать или не удалось:

  • Откройте окно "Точки останова" через Выполнить → Просмотреть точки останова.
  • Появится диалоговое окно Breakpoints. На левой панели прокрутите страницу вниз. Выберите Любое исключение в разделе Контрольные точки исключения Java
  • При выборе Любое исключение на правой панели настройте следующим образом:
    • Приостановить: отмечен
    • Все: выбрано
    • Условие: !(this instanceof java.lang.ClassNotFoundException)
    • Уведомления: как Исключенное исключение и Недоступно исключение

Breakpoints dialog

  1. Установите флажок Фильтры классов, чтобы включить фильтрацию классов (как указано @Scott Barta). Затем нажмите кнопку ... (elipsis), чтобы открыть диалоговое окно Class Filters. Задайте шаблоны пространства имен классов, нажав кнопку Add Pattern (Добавить шаблон). Войти:
    • com.myapp.* (замените это префиксом пространства имен вашего приложения)
    • java.* (обратите внимание: в соответствии с вопросом OP оставьте это, чтобы НЕ ломаться в библиотеках Java)
    • android.* (как указано выше, не нужно просто отлаживать собственный код приложения)
    • При необходимости добавьте дополнительные пространства имен (например, сторонние библиотеки)

Class Filters

  1. Нажмите ОК, затем отпустите диалог "Точки останова".

Ответ 2

Если вы откроете окно Breakpoints, это даст вам довольно много вариантов, чтобы его условно сломать или нет. Здесь вы найдете "Фильтры классов" - вы можете указать подстановочное выражение, например, с помощью пути пакета Java, и оно будет ломаться только для исключений, генерируемых из соответствующих классов.

Ответ 3

Чтобы обойти все исключения в коде и другие исключения, если не удалось:

Эти методы отфильтровывают типы исключений, которые запускаются во время нормальной работы (не очень ли они исключительны?). Он не использует фильтр класса, поскольку он слишком сильно отфильтровывает; ошибки в вашем коде часто заставляют классы времени выполнения генерировать исключения (например, доступ к списку массивов за конец).

  • Включить исключение исключений Java исключений/исключение только для исключений uncaught.

  • Добавьте новый Java Breakpoint для Exception (java.lang) класса для исключений catch и uncaught. Включите Условие и установите для этого значение:

        !(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, является способом эффективного получения второй записи "Любое исключение".)