Отладка Android‑приложения: быстро включить debug и анализировать логи
Включите debug‑вариант (debuggable=true), запустите приложение в режиме Debug в Android Studio или подключите устройство с USB‑отладкой; читайте логи через Logcat или adb logcat с фильтрацией по тегу или PID и ставьте breakpoint’ы для пошаговой диагностики.
Оглавление {{TOC_AUTOMATIC}}
Как включить debug и запустить приложение под отладчиком
- Убедитесь, что debug‑variant debuggable
- Откройте module:app/build.gradle и проверьте секцию buildTypes: debug обычно содержит debuggable true (по умолчанию). Если его нет — добавьте. Пример:
buildTypes {
debug {
debuggable true
applicationIdSuffix ".debug"
versionNameSuffix "-debug"
}
release {
debuggable false
minifyEnabled true
}
}
- Выберите variant в Android Studio
- View → Tool Windows → Build Variants → выберите debug для модуля app.
- Нажмите Debug ▶ для запуска с подключением отладчика (или Run ▶ для простого запуска).
- Подключение устройства
- Эмулятор: Device Manager → создайте AVD → запустите.
- Физическое устройство: включите "Для разработчиков" и "USB‑отладку", подключите кабелем, подтвердите разрешение на устройстве.
- Проверьте видимость: adb devices
Если баг проявляется только в release (из‑за обфускации), соберите release‑apk, установите его и используйте "Attach debugger to Android process" для подключения к запущенному процессу.
Логирование в коде: что использовать и как отключать в релизе
- Стандартный Log
- Используйте android.util.Log: Log.v/d/i/w/e/wtf с осмысленными короткими TAG'ами. Пример (Kotlin):
private const val TAG = "Auth"
Log.d(TAG, "Start login user=$user")
Log.e(TAG, "Login error", exception)
- Контроль уровня логирования в релизе
- Обёртка, которая проверяет BuildConfig.DEBUG, позволит убрать verbose/debug‑сообщения в продакшне:
object AppLogger {
private const val DEBUG = BuildConfig.DEBUG
fun d(tag: String, msg: String) { if (DEBUG) Log.d(tag, msg) }
fun e(tag: String, msg: String, tr: Throwable? = null) { Log.e(tag, msg, tr) }
}
- Правила полезного логирования
- Логируйте только ключевые события: переходы экранов, запросы/ответы сети, ошибки.
- Не логируйте пароли и токены; применяйте маскирование.
- Для горячих путей избегайте логирования в каждом вызове — используйте агрегаты.
Частая ошибка: логировать всё подряд. Это создаёт шум, ухудшает читаемость и может раскрыть личные данные.
Чтение логов через Logcat в Android Studio
- Откройте Logcat: View → Tool Windows → Logcat.
- Выберите устройство и процесс (package name). Если приложений много — нажмите "Show only selected application".
- Фильтры и поиск:
- По тегу: tag:Auth
- По уровню: level:W или выбрать в выпадающем списке
- Сохраняйте часто используемые фильтры (кнопка "+")
- Анализ крашей:
- Найдите "FATAL EXCEPTION" → в стеке найдите первую строку с вашим package → кликните и перейдите к коду.
Используйте короткие и осмысленные теги (Auth, Network, UI) — это ускорит фильтрацию.
Чтение логов через adb (без IDE)
- Базовые команды
- Смотреть логи в реальном времени: adb logcat
- Очистить буфер: adb logcat -c
- Формат с временем: adb logcat -v time
- Фильтрация по тегу и уровню:
- adb logcat Auth:D *:S (показывать только Auth начиная с Debug)
- Фильтрация по процессу (PID):
- Узнать PID: adb shell pidof com.example.app
- Фильтровать: adb logcat | grep
- Или (если поддерживает ADB): adb logcat --pid=$(adb shell pidof com.example.app)
- Сохранение логов:
- adb logcat -v time > logs.txt
Breakpoint’ы и пошаговая отладка
- Установите breakpoint щелчком слева от номера строки.
- Запустите Debug ▶ или Attach debugger.
- Используйте Step Over (F8), Step Into (F7), Step Out (Shift+F8).
- Смотрите значения переменных в окне Debug, можно менять значения «на лету».
Если breakpoint не срабатывает: проверьте, что запущен debug‑variant; пересоберите проект; убедитесь, что код на устройстве совпадает с исходниками.
Частые ошибки
- Запуск release‑варианта вместо debug — breakpoint’ы не работают, стеки могут быть неполными.
- Логирование чувствительных данных (пароли, токены).
- Отсутствие тегов или слишком длинные/неосмысленные теги.
- Игнорирование PID при фильтрации — смешение с системными логами.
- Полный log‑spam: логирование внутри горячих циклов.
FAQ
- Как быстро увидеть только логи моего приложения?
- В Logcat включите "Show only selected application" или фильтр по package name; в adb — используйте --pid или grep по PID.
- Почему не показываются стеки исключений?
- Возможно, вы не используете debug‑variant или логи обрезаются из‑за minify/obfuscation в релизе.
- Можно ли собирать логи на CI без доступа к устройству?
- Да: подключите устройство к CI или используйте эмулятор и adb logcat, перенаправив вывод в файл.
- Как отлавливать редкие баги у пользователей?
- Соберите логи через adb (если доступно), используйте crash‑репортеры или предложите пользователю включить специальную debug‑сборку.
Мини‑чеклист перед отладкой
- Запущен debug‑variant (debuggable=true).
- Устройство/эмулятор видны (adb devices).
- Осмысленные теги в логах.
- Фильтры Logcat настроены по package/PID/tag.
- Для сложных случаев — breakpoint’ы и пошаговая отладка.
Используйте эти шаги последовательно: настройка build, корректное логирование, фильтрация логов и использование отладчика — и вы сможете находить причины ошибок быстро и надёжно.