Как правильно установить точку останова исключения в Android Studio?
я месяцами пытался заставить мой отладчик сломаться на моем собственном коде, без успеха. Каждое необработанное исключение ломается в ZygoteInit.метод Run.
вот список действий, которые я забрал.
- добавил
debug { debuggable true }
к сборке моего модуля приложения.файл gradle - вручную добавил
debuggable="true"
к моему AndroidManifest.xml-файл - проверил
Any exception
флажок в окне точки останова - добавлен соответствующий фильтр классов шаблоны для
Any exception
останова- это вызывает отладчик, чтобы полностью пропустить все непойманные исключения
Я отлаживал, глядя на трассировку стека в Logcat, которая показывает мои классы в трассировке стека.
Я видел эту версию на текущих и предыдущих сборках в стабильных и Канарских каналах.
есть что-то здесь, что я упускаю?
EDIT: просто чтобы уточнить для людей, проблема была в том, что у меня был флажок "пойманное исключение"снят. установка этого флажка исправила мою проблему.
вот соответствующая часть моего файла Gradle, если это вообще помогает.
android {
compileSdkVersion 22
buildToolsVersion '22.0.0'
defaultConfig {
applicationId "com.--redacted--"
minSdkVersion 15
targetSdkVersion 22
versionCode 30
versionName "0.0.30"
multiDexEnabled true
}
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/beans.xml'
}
buildTypes {
debug {
debuggable true
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dexOptions {
javaMaxHeapSize "4g"
}
}
вот скриншот моего окна точек останова.
2 ответов
еще пара вещей для обеспечения:
- приостановить набор для всех
- уведомления о:
- исключения если исключения, которые имеют обработку ошибок определены должны быть пойманы
- непойманные исключения если исключения, которые не обрабатываются, должны быть пойманы
- установите фильтры класса для ограничения, чтобы включить только ваш код, код Android и код Java
посмотреть более подробные инструкции здесь: https://stackoverflow.com/a/28862538/3063884
этот подход ловит все исключения, которые возникают (когда "пойман" и "не пойман" проверяются). Таким образом, возникают все внутренние исключения. Спецификация фильтра классов ограничивает это, исключая некоторые из этих исключений. Например, на экране-дамп выше,ClassNotFoundException
, который часто поднимается во время запуска, игнорируется.
A небольшой недостаток этого подхода заключается в том, что во время запуска приложения может появиться сообщение, указывающее "не удается найти исходный класс для текущего кадра стека". Это связано с тем, что еще не весь исходный код был загружен. Это произойдет только один раз во время запуска и может быть безопасно проигнорировано. Альтернативный подход, чтобы избежать этого (если нет никаких исключений, ожидаемых во время запуска приложения), - "запустить" приложение (в отличие от запуска "Debug"), а затем вручную прикрепите приложение к отладчику via Run ->прикрепить отладчик к процессу Android ... или нажав кнопка на панели инструментов.
вам нужно подключить отладчик к запущенному процессу
вам не всегда нужно перезапускать приложение для его отладки.
Для отладки приложения, которое уже запущено:
- нажмите прикрепить отладчик к Android proccess
- в окне выбрать процесс выберите устройство и приложение, к которым вы хотите прикрепить отладчик
-
чтобы открыть окно средства отладки, нажмите кнопку отладка
To view and configure the breakpoints settings, click View Breakpoints on the left side of the Debug tool window. The Breakpoints window appears, and there you could configure them.
существует три основных типа исключений:
Checked execptions: которые должны обрабатываться кодом. Они представляют собой предотвратимые исключительные условия, которые могут быть обработанным и восстановленным.
исключения времени выполнения: которые не должны обрабатываться код. Это неожиданные исключительные условия который можно обрабатывать, но не обязательно восстанавливать от.
ошибки: которые не должны обрабатываться кодом. Эти представляют строгие непредвиденные исключительные условия которые не изгоняются попытаюсь справиться.