Как быстро найти и исправить падения в Android Studio
В Android Studio отладку организуют запуск в режиме Debug, точечные breakpoints, анализ Logcat и стек‑трэйсов, а для сложных проблем — Profiler и краш‑репорты (Crashlytics). Эти инструменты позволяют быстро локализовать NullPointer, OOM, ANR и ошибки ProGuard.
Настройка и запуск режима Debug
- Запустите приложение в режиме отладки: Shift+F9 или кнопка с жучком. Это подключит отладчик без полной перекомпиляции.
- Выберите устройство или эмулятор; для реального устройства включите Developer options → USB debugging.
- Не ставьте debuggable=true в релизе; Android Studio по умолчанию собирает debug‑сборку с включённой отладкой.
- При необходимости прикрепите к уже запущенному процессу: 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 очищается при перезагрузке устройства; если нужен длительный сбор — экспортируйте логи или используйте внешнюю систему логирования.
Поиск причин крашей и инструменты
- Стек‑трэйс: клик по ошибке в Event Log или Run Console — Studio перейдёт к строке кода.
- NullPointerException: поставьте breakpoint на строке, проверьте значения в Variables, trace вызовов, ищите места без проверки null и добавьте @NonNull/@Nullable.
- OutOfMemoryError: откройте Profiler → Memory, снимите heap dump (HPROF), ищите retainers/ретейнер‑цепочки; оптимизируйте использование bitmap (пагинация, вьюпулы, библиотеки загрузки).
- ANR: CPU Profiler показывает горячие методы в main thread; перемещайте тяжёлую работу в Coroutines/Executors/WorkManager.
- ClassNotFound/ProGuard: проверьте правила R8/ProGuard и добавьте -keep для нужных классов/рефлексии.
- Сетевая активность в UI: Logcat покажет NetworkOnMainThread — выполняйте запросы асинхронно (suspend/retrofit/okhttp, Executors).
Частые типы крашей и как их находить
| Краш | Причина | Где смотреть |
|---|---|---|
| NullPointerException | Обращение к null | Stack trace → breakpoint → Variables |
| OutOfMemoryError | Большие объёмы памяти | Memory Profiler, heap dump |
| ANR | Блокировка main thread >5s | CPU Profiler |
| ClassNotFoundException | R8/сборка/рефлексия | ProGuard/R8 настройки, сборка |
Частые ошибки
- Попытка отлаживать релиз‑сборку с включённым minification — дебаг может не соответствовать исходникам.
- Ставить слишком много условных breakpoint’ов без фильтров — отладчик тормозит.
- Игнорирование потоков: смотрите Threads в окне Debug, чтобы не запутаться при конкурентном коде.
FAQ
- Как быстро поймать NullPointer? — Ищите в стек‑трэйсе место исключения, ставьте breakpoint до вызова и проверяйте переменные в Variables.
- Что делать, если Logcat пуст? — Убедитесь в выбранном устройстве/PID, отключите фильтры и перезапустите adb (если нужно).
- Как анализировать утечку памяти? — Сделайте heap dump в Memory Profiler, найдите объекты с большим retainer size и проверьте причины удержания (статические ссылки, кеши, слушатели).
Завершите практикой: на простом проекте воспроизводите ошибки, применяйте breakpoints и профилирование — это отточит навык и ускорит поиск причин падений.