Как быстро найти и исправить падения в Android Studio

В Android Studio отладку организуют запуск в режиме Debug, точечные breakpoints, анализ Logcat и стек‑трэйсов, а для сложных проблем — Profiler и краш‑репорты (Crashlytics). Эти инструменты позволяют быстро локализовать NullPointer, OOM, ANR и ошибки ProGuard.

Настройка и запуск режима Debug

  1. Запустите приложение в режиме отладки: Shift+F9 или кнопка с жучком. Это подключит отладчик без полной перекомпиляции.
  2. Выберите устройство или эмулятор; для реального устройства включите Developer options → USB debugging.
  3. Не ставьте debuggable=true в релизе; Android Studio по умолчанию собирает debug‑сборку с включённой отладкой.
  4. При необходимости прикрепите к уже запущенному процессу: Run → Attach Debugger to Android Process — удобно для сервисов и процессов, запускаемых вне UI.

Если нужен быстрый перебор — включайте Instant Run / Apply Changes (если поддерживается) и используйте Attach Debugger для уже запущенных процессов.

Работа с breakpoints и Debugger

  • Установка: клик в левой margin рядом с номером строки. Типы: обычный (pauses), условный (expression), logpoint (печатает без паузы).
  • Условные точки: задавайте простые выражения (i == 10) или hit count, чтобы избегать лишних пауз.
  • Watch/Evaluate: в окне Debug → Variables добавляйте Watches и используйте Evaluate Expression для проверки выражений на лету.
  • Навигация: Step Over (F8), Step Into (F7), Step Out (Shift+F8), Resume Program (F9).
  • Экспорт/импорт: Run → View Breakpoints → Export/Import — удобно делиться конфигурацией с командой.

Logcat и анализ крашей

  • Откройте Window → Show Logcat. Фильтруйте по уровню (Error/Warn/Info), по тегу или PID.
  • Для крашей ищите "FATAL EXCEPTION" и имя исключения (например, NullPointerException). Для зависаний — ANR.
  • Используйте Regex в строке поиска: пример ^FATAL|NullPointerException для захвата критичных сообщений.
  • Сохраняйте логи через Export Logs при оформлении баг‑репорта.

Logcat очищается при перезагрузке устройства; если нужен длительный сбор — экспортируйте логи или используйте внешнюю систему логирования.

Поиск причин крашей и инструменты

  1. Стек‑трэйс: клик по ошибке в Event Log или Run Console — Studio перейдёт к строке кода.
  2. NullPointerException: поставьте breakpoint на строке, проверьте значения в Variables, trace вызовов, ищите места без проверки null и добавьте @NonNull/@Nullable.
  3. OutOfMemoryError: откройте Profiler → Memory, снимите heap dump (HPROF), ищите retainers/ретейнер‑цепочки; оптимизируйте использование bitmap (пагинация, вьюпулы, библиотеки загрузки).
  4. ANR: CPU Profiler показывает горячие методы в main thread; перемещайте тяжёлую работу в Coroutines/Executors/WorkManager.
  5. ClassNotFound/ProGuard: проверьте правила R8/ProGuard и добавьте -keep для нужных классов/рефлексии.
  6. Сетевая активность в UI: Logcat покажет NetworkOnMainThread — выполняйте запросы асинхронно (suspend/retrofit/okhttp, Executors).

Частые типы крашей и как их находить

КрашПричинаГде смотреть
NullPointerExceptionОбращение к nullStack trace → breakpoint → Variables
OutOfMemoryErrorБольшие объёмы памятиMemory Profiler, heap dump
ANRБлокировка main thread >5sCPU Profiler
ClassNotFoundExceptionR8/сборка/рефлексияProGuard/R8 настройки, сборка

Частые ошибки

  • Попытка отлаживать релиз‑сборку с включённым minification — дебаг может не соответствовать исходникам.
  • Ставить слишком много условных breakpoint’ов без фильтров — отладчик тормозит.
  • Игнорирование потоков: смотрите Threads в окне Debug, чтобы не запутаться при конкурентном коде.

FAQ

  • Как быстро поймать NullPointer? — Ищите в стек‑трэйсе место исключения, ставьте breakpoint до вызова и проверяйте переменные в Variables.
  • Что делать, если Logcat пуст? — Убедитесь в выбранном устройстве/PID, отключите фильтры и перезапустите adb (если нужно).
  • Как анализировать утечку памяти? — Сделайте heap dump в Memory Profiler, найдите объекты с большим retainer size и проверьте причины удержания (статические ссылки, кеши, слушатели).

Завершите практикой: на простом проекте воспроизводите ошибки, применяйте breakpoints и профилирование — это отточит навык и ускорит поиск причин падений.