2015-03-19 3 views
6

Я пытаюсь в течение нескольких месяцев, чтобы мой отладчик нарушил мой собственный код, без успеха. Каждое неперехваченное исключение разбивается на метод ZygoteInit.run().Как правильно установить контрольную точку исключения в Android Studio?

Вот список действий, которые я предпринял.

  1. Добавлено debug { debuggable true } в файл build.gradle моего приложения модуля
  2. вручную добавил debuggable="true" в моем AndroidManifest.xml файл
  3. Проверил Any exception флажок в окне Breakpoints
  4. Добавлен соответствующие модели класса фильтра к Any exception точка останова
    • Это приводит к тому, что отладчик полностью пропускает все неперехваченные исключения

Я отладки, глядя на трассировки стека в LogCat, которая действительно показывает свои классы в трассировке стека.

Я видел эту версию на текущий момент & предыдущие сборки в каналах стабильной и канареечной.

Есть ли что-то здесь, мне не хватает?

РЕДАКТИРОВАТЬ: Только для разъяснения людям, проблема в том, что У меня был флажок «Пойман исключение». Проверка этого исправления устраняет проблему.

Вот соответствующая часть моего файла 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" 
    } 
} 

Вот скриншот моего окна Breakpoints.

Breakpoints window

+0

Не можете ли вы просто добавить блоки try/catch повсюду, чтобы сузиться там, где происходит исключение, а затем просто положить точку прерывания и отладить код, как только вы сузили его до определенного блока кода? –

+0

@Fahim, который не затронул мой вопрос. Эта ссылка не упоминает контрольные точки исключения. –

+0

@ DanielNugent моя кодовая база довольно большая. Это не реалистичное решение. Я надеялся, что инструменты отладки будут работать только как рекламируемые. –

ответ

9

Еще пара вещей, чтобы обеспечить:

  • Приостановка установлен на всех
  • Уведомления на:
    • Caught исключения если исключения, которые имеют обработка ошибок определяется которые должны быть пойманы
    • Необязанные исключения, если исключения, которые не обрабатываются, должны быть пойманы
  • Установите фильтры класса ограничения включать только код, Android код, и Java код

посмотреть более подробные инструкции здесь: https://stackoverflow.com/a/28862538/3063884

Breakpoints dialog

Этот подход забирает все исключения, которые поднимаются (когда «пойманы» и «не пойманы»). Таким образом, все внутренние исключения возникают. Спецификация фильтра класса ограничивает это, исключив некоторые из этих исключений. Например, в скриншоте выше ClassNotFoundException, который часто возникает при запуске, игнорируется.

Небольшой недостаток этого подхода заключается в том, что во время запуска приложения может появиться сообщение, указывающее «Невозможно найти исходный класс для текущего кадра стека». Это связано с тем, что еще не загружен исходный код. Это будет происходить только один раз во время запуска и может быть безопасно проигнорировано. Альтернативный подход, чтобы избежать этого (если нет исключений, ожидаемых при запуске приложения), это «Запустить» Run приложение (в отличие от запуска «Отладка»), а затем вручную подключить приложение к отладчику через Запуск ->Приложите отладчик к процессу Android ... или нажав кнопку Attach на панели инструментов.

+0

Невозможно сделать это, не нарушив обнаруженные исключения? –

+0

Да, в диалоговом окне выше снимите флажок «Пойманное исключение» в разделе «Уведомления». – CJBS

+1

Я думаю, что это может быть причиной моей неспособности сломать мой собственный код. Так как все исключения в Android пойманы в ZygoteInit.run() –

1

Вам нужно присоединить отладчик к запущенному процессу

Вы не всегда должны перезапустить приложение для его отладки.
Для отладки приложения, которые вы уже запущен:

  1. Нажмите Присоединить отладчик для Android proccess
  2. В окне Выбор процесса, выберите устройство и приложение, которое вы хотите присоединить отладчик к
  3. Чтобы открыть окно инструментов отладки, нажмите Debug

    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.

Есть три основных типа исключений:

  1. проверяемые execptions: которые должны быть обработаны с помощью кода. Они представляют собой исключаемые исключительные условия, с которыми можно обрабатывать и восстанавливать .

  2. Runtime Исключения: которые не должны обрабатываться кодом . Они представляют собой неожиданные исключительные условия , которые могут обрабатываться, но не обязательно восстанавливаться.

  3. Ошибки: при этом код не требуется. Эти представляют собой серьезные неожиданные исключительные условия, с которыми не следует пытаться обрабатывать .

+0

Я привязан к процессу, так как я нажал значок отладки и могу остановиться на методах контрольных точек во время запуска приложения. –

+1

Вы настроили параметры точки останова в диалоговом окне? –

+0

Да, я так и думал, я изложил это в вопросе выше. –

Смежные вопросы