Отладка Android‑приложения: быстро включить debug и анализировать логи

Включите debug‑вариант (debuggable=true), запустите приложение в режиме Debug в Android Studio или подключите устройство с USB‑отладкой; читайте логи через Logcat или adb logcat с фильтрацией по тегу или PID и ставьте breakpoint’ы для пошаговой диагностики.

Оглавление {{TOC_AUTOMATIC}}

Как включить debug и запустить приложение под отладчиком

  1. Убедитесь, что debug‑variant debuggable
  • Откройте module:app/build.gradle и проверьте секцию buildTypes: debug обычно содержит debuggable true (по умолчанию). Если его нет — добавьте. Пример:
buildTypes {
  debug {
    debuggable true
    applicationIdSuffix ".debug"
    versionNameSuffix "-debug"
  }
  release {
    debuggable false
    minifyEnabled true
  }
}
  1. Выберите variant в Android Studio
  • View → Tool Windows → Build Variants → выберите debug для модуля app.
  • Нажмите Debug ▶ для запуска с подключением отладчика (или Run ▶ для простого запуска).
  1. Подключение устройства
  • Эмулятор: Device Manager → создайте AVD → запустите.
  • Физическое устройство: включите "Для разработчиков" и "USB‑отладку", подключите кабелем, подтвердите разрешение на устройстве.
  • Проверьте видимость: adb devices

Если баг проявляется только в release (из‑за обфускации), соберите release‑apk, установите его и используйте "Attach debugger to Android process" для подключения к запущенному процессу.

Логирование в коде: что использовать и как отключать в релизе

  1. Стандартный 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)
  1. Контроль уровня логирования в релизе
  • Обёртка, которая проверяет 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) }
}
  1. Правила полезного логирования
  • Логируйте только ключевые события: переходы экранов, запросы/ответы сети, ошибки.
  • Не логируйте пароли и токены; применяйте маскирование.
  • Для горячих путей избегайте логирования в каждом вызове — используйте агрегаты.

Частая ошибка: логировать всё подряд. Это создаёт шум, ухудшает читаемость и может раскрыть личные данные.

Чтение логов через Logcat в Android Studio

  1. Откройте Logcat: View → Tool Windows → Logcat.
  2. Выберите устройство и процесс (package name). Если приложений много — нажмите "Show only selected application".
  3. Фильтры и поиск:
  • По тегу: tag:Auth
  • По уровню: level:W или выбрать в выпадающем списке
  • Сохраняйте часто используемые фильтры (кнопка "+")
  1. Анализ крашей:
  • Найдите "FATAL EXCEPTION" → в стеке найдите первую строку с вашим package → кликните и перейдите к коду.

Используйте короткие и осмысленные теги (Auth, Network, UI) — это ускорит фильтрацию.

Чтение логов через adb (без IDE)

  1. Базовые команды
  • Смотреть логи в реальном времени: adb logcat
  • Очистить буфер: adb logcat -c
  • Формат с временем: adb logcat -v time
  1. Фильтрация по тегу и уровню:
  • adb logcat Auth:D *:S (показывать только Auth начиная с Debug)
  1. Фильтрация по процессу (PID):
  • Узнать PID: adb shell pidof com.example.app
  • Фильтровать: adb logcat | grep
  • Или (если поддерживает ADB): adb logcat --pid=$(adb shell pidof com.example.app)
  1. Сохранение логов:
  • 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, корректное логирование, фильтрация логов и использование отладчика — и вы сможете находить причины ошибок быстро и надёжно.