Домой Android разработкаAndroid Studio Debug ошибок в андроид приложениях

Debug ошибок в андроид приложениях

by dilix
Debug ошибок в андроид

Ошибки в Android приложениях — неотъемлемая часть любой разработки, то насколько быстро разработчик находит баг влияет на скорость создания мобильного приложения, а то, насколько точно получается локализовать проблему — на качество конечного продукта. Давайте рассмотрим подходы и инструменты, которые помогают при дебаге.

ADB = Android Debug Bridge

Все общение с подключенным устройством или эмулятором происходит через утилиту командной строки ADB (Android Debug Bridge) — данный инструмент входит в Android SDK и скачать его можно на официальной странице.

Debugger в Android Studio

Посмотреть как программа себя ведет по шагам, какие значения принимают переменные и т.д. позволяет debugger, встроенный в среду разработки Android Studio.

Что такое Stacktrace

Stacktrace — это последовательность вызовов, которая привела до определенного момента в коде. Когда приложение крэшится, то, чтобы понять почему это произошло, зачастую, достаточно открыть Logcat и посмотреть stacktrace. В нем будет информация, что, где и почему упало.

StackTrace в Android StudioВ данном примере видно, что на 63 строке в классе SingleBankConnectedFragment произошел IllegalStateException.

StackTrace и Proguard

Важное замечание — если вы обфусцировали ваше приложение и оно упало уже после этого, то логи читать чуть чуть сложнее. Есть и хорошая новость — при сборке приложения создается mapping файл, в котором указывается какие классы как стали называться. В Google play developer console например можно этот файл даже загрузить, чтобы расшифровка логов происходила автоматически.

Breakpoint

Breakpoint, или по-русски «Точка останова» — флаг, устанавливающийся на определенную строчку-инструкцию в программе. Она говорит, что в этом месте исполнение приложения надо поставить на паузу. После этого разработчик сможет посмотреть значения переменных в данный момент для поиска багов. Далее надо решить — пойти ли дальше по шагам, зайти ли внутрь очередной функции или просто возобновить исполнение.

Для того, чтобы установить Breakpoint достаточно нажать на область рядом с номером строки


Debug ошибок в андроид приложениях

Чтобы запустить программу в debug режиме, есть специальная кнопка в панели Android studio

Debug ошибок в андроид приложениях

Также можно подключиться к уже выполняющемуся процессу

Debug ошибок в андроид приложениях

Когда процесс остановится в указанной точке можно перейти к следующей инструкции (строчке в программе). Также можно зайти внутрь функции, если в данный момент времени находимся на строчке ее вызова.

Debug ошибок в андроид приложениях

Вычисление значений на лету

В режиме дебага, находясь на определенной строке можно посмотреть состояние программы в данный момент. То, какие переменные какие значения принимают.

Debug ошибок в андроид приложениях

Также можно произвести любые вычисления в данном контексте

Debug ошибок в андроид приложениях

Подмена значений переменных на лету

Иногда полезно подменить значение переменной прямо на лету. Например, когда отображение в интерфейсе зависит от переменной. Тогда удобно, не перекомпилируя приложение или изменяя значения в базе данных, посмотреть как будет выглядеть UI при разных значениях. Это можно сделать прямо из окна мониторинга переменных

Debug ошибок в андроид приложениях

Условный Breakpoint

Не всегда необходимо всегда останавливать выполнение программы на определенной строке. К примеру, если хотим продебажить тело цикла, в котором много итераций и нам интересна только та, на которой выполняется определенное условие. Для таких целей точке останова можно задать условие:

Debug ошибок в андроид приложениях

программа остановится, только если выполнится условие для данного Breakpoint.

Layout inspector в Android Studio для дебага View

В Android Studio есть одна очень полезная вещь для дебага — Layout inspector. Он позволяет просмотреть UI открытой активности к разрезе отдельных View. Это бывает удобно, особенно если


  • Необходимо отдебажить код, связанный с определенным интерфейсом — можно быстро найти нужные id view и перейти в IDE в нужный участок кода,
  • Проблема связана с отображением интерфейса — можно посмотреть где какие элементы располагаются, что мешают друг другу и тд.

Layout inspector вызывается из меню Tools -> Layout inspector

Debug ошибок в андроид приложениях

Инструмент позволяет прямо в Android studio видеть элементы интерфейса запущенного Android приложения, посмотреть свойства отдельно взятого View и увидеть целиком иерархию конкретно взятого интерфейса

Debug ошибок в андроид приложениях

Логи как средство для дебага

Когда дело касается порядка вызова методов, особенно когда методы асинхронные, бегать по коду в режиме дебага не удобно. Тогда на помощь приходят логи и android logcat. Инструмент, позволяющий получить логи из android приложения.

Разместив вывод в лог в интересующих методах можно наблюдать порядок их вызова.

Hint: для удобства и ускорения работы с логами, можно использовать Live template в Android Studio

Мой шаблон для расстановки логов с именем logs выглядит так

Log.e("!@#", "$package$.$method$:$line$");

Вывод в канал ошибок лога с тэгом !@#, что позволяет легко его отфильтровать и сообщением, которое содержит имя пакета, класс и строку.

Находясь на нужной строчке остается нажать Ctrl + J (вызов диалога добавления шаблона), написать logs и нажать Enter

Debug ошибок в андроид приложениях

И IDE сама добавит строку, вида

Log.e("!@#", "com.package.test.MyActivity:64");

Сетевой мониторинг

Когда дело доходит до взаимодействия с сервером, не всегда ошибка на стороне клиента. В процессе разработки всегда стоит включать логирование сетевый запросов и ответов в Logcat.

Okhttp

Okhttp — популярный HTTP клиент, который позволяет включить логирование сетевых запросов практически из коробки.

Добавляем в проект библиотеку logging-interceptor

implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'

и при конфигурировании Okhttp клиента добавляем нужный interceptor, а для того, чтобы логи не попали в релизную версию наверняка, условием добавления логирования сетевых запросов можно определить как сборка Debug версии приложения

HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder builder = new OkHttpClient.Builder();
if (BuildConfig.DEBUG) {
  builder.addInterceptor(logging);
}
OkHttpClient client = builder.build();

Retrofit

Retrofit часто используется при создании клиент-серверных приложений. Для того, чтобы включить логирование сетевых запросов, достаточно лишь указать клиентом в Retrofit Okhttp, настроенный как описано выше

builder.client(okHttpClient);

Fiddler, Charles и другие прокси

Отследить сетевой траффик также можно с помощью специализированных программ, проксирующие через себя траффик мобильного приложения, например такие как Fiddler, Charles и другие.

Debug обфусцированного кода

При дебаге кода после обфускации надо помнить, что номера строк и имена методов не совпадают с тем, что вы видите в исходниках. При сборке будет создан map file, который поможет соотнести stracktrace в продакшене с вашим кодом.

Вы теперь в курсе как отладить приложение. Время узнать какие полезные инструменты есть для его создания.

Хочешь обсудить Android разработку?
Заходи к нам Вконтакте, на Facebook и в Телеграм!

Добавить комментарий

Может быть интересно

Этот сайт использует Cookie файлы для улучшения вашего пользовательского взаимодействия. Используя данный сайт вы соглашается с этим. Принять Читать

Политика конфиденциальности и Cookies