Практическая инструкция: Logcat для быстрой отладки
Logcat показывает логи в реальном времени; чтобы быстро найти причину ошибки откройте панель Logcat, выберите устройство и пакет приложения, установите уровень Error/Warn и ищите FATAL EXCEPTION / NPE — затем читайте стек‑трейс и ищите первые строки с вашим пакетом.
Быстрый старт — как открыть и настроить Logcat
- В Android Studio: View → Tool Windows → Logcat. При подключённом устройстве или запущенном эмуляторе список устройств появится в левом верхнем списке.
- Выберите устройство и приложение (package). Это автоматически отфильтрует часть системного шума.
- Установите уровень логирования: Error → Warn → Info → Debug → Verbose. Для поиска крашей начните с Error+Warn.
- Используйте строку фильтра: по TAG, PID, ключевым словам или regex (включается иконкой Aa).
Подключайте реальное устройство по USB с включённой отладкой. Для эмулятора запустите AVD — Logcat подхватит логи автоматически.
Фильтры, поиск и чтение стек‑трейсов
- Поиск крашей: ищите "FATAL EXCEPTION", "Caused by", "java.lang.NullPointerException", "OutOfMemoryError".
- Чтение стек‑трейса: найдите первую строку своего пакета (com.example...) — это место, где произошёл сбой в вашем коде; номер строки подскажет файл и строку.
- PID и TAG: фильтруйте по PID, чтобы не мешались логи других процессов; по TAG происходит фильтрация по вашей метке логирования.
- Regex: вводите выражения вида NullPointerException|OutOfMemory для захвата нескольких типов ошибок.
- Примеры adb:
- Показать ошибки для тега: adb logcat -v threadtime MyTag:*:E
- Сохранить журнал: adb logcat -d > crash.log
- Все буферы: adb logcat -b all
Не тратьте время на системные сообщения вроде Choreographer или InputDispatcher, если они явно не связаны с вашим пакетом — фокусируйтесь на ошибках, после которых появляется stacktrace вашего приложения.
Чек‑лист фильтров и быстрых проверок
| Фильтр | Что проверить |
|---|---|
| Ваш package + Error | Первый стек‑трейс с вашим пакетом — строка и класс ошибки |
| PID | Изолировать поток приложения от сервисов/других приложений |
| Regex "NullPointerException | OutOfMemory" |
| adb logcat -b all | Проблемы на уровне системы (crash/events/main) |
Продвинутые приёмы и интеграция
- Сохранение и анализ: экспортируйте лог через кнопку Export или adb logcat > файл для совместного анализа и CI.
- Heap dumps и утечки: при OOM используйте Memory Profiler, сделайте heap dump и ищите удерживающие объекты.
- ANR: ищите ActivityManager: ANR и долгие операции в UI‑thread; профайлер CPU поможет найти блокирующие вызовы.
- Автоматизация: в CI можно запускать adb logcat и парсить вывод на предмет FATAL EXCEPTION; для сборки крашей используйте сервисы сбора ошибок на продакшн‑устройствах.
- Комбинация инструментов: Logcat + Profiler + стек‑трейсы из краш‑сервиса даёт быстрый путь к исправлению 90% багов.
Частые ошибки
- Фильтр не установлен по пакету — получаете слишком много шума.
- Число строк в стектрейсе не соответствует исходникам (proguard/minify) — используйте mapping.txt для deobfuscation.
- Ищете первую строку стека, а не "Caused by" — иногда корень скрыт ниже.
- Пытаетесь фиксить по системному логу без проверки стека вашего приложения.
FAQ
- Как быстро найти NPE? — Введите NullPointerException в поиск или regex; найдите первую строку стека с вашим пакетом.
- Почему стек‑трейс не показывает мои имена методов? — Скорее всего код минифицирован; примените deobfuscation с mapping.txt.
- Как собрать логи с удалённого устройства пользователя? — Используйте сервисы сбора крашей или попросите пользователя прислать adb logcat -d > log.txt.
- Что смотреть при ANR? — Ищите записи ActivityManager: ANR и анализируйте main thread в профайлере.
Практикуйтесь читать стек‑трейсы и настраивать фильтры — через несколько итераций Logcat станет инструментом, на который вы тратите минуты, а не часы.