Android Studio Debugging: Продвинутый уровень

Часть вторая

На продвинутом уровне будет слегка посложнее

Перед погружением

Мы продолжаем изучать полезный инструмент для любого разработчика — отладчик, он же debbuger.

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

В этой статье мы пойдем дальше, к более продвинутым возможностям. Кстати, если я что-то упущу, или у вас есть чем дополнить эту статью — смело пишите мне и я буду очень рад вашей поддержке!

И я рекомендую прочитать первую часть перед изучением этой статьи, если вы еще не читали ее.

Проверка выражения

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

В режиме отладки и во время остановки на breakpoint-е (⌥+F8)

Долгое время я не знал про эту возможность и пользовался различными подпорками-костылями. Вещь весьма удобная но есть вопрос…

А изменяется ли состояние объекта?

Код для проверки.

План простой:

  • Останавливаю выполнение программы в режиме отладки на 4й строке — как раз перед вызовом метода test()
  • Применяю Проверку выражения к методу test() несколько раз
  • Проверяем check == 2
  • Если true то то состояние программы не меняется. Если больше то меняется.

Итак, барабанная дробь…

Следите за руками)

И ответ:

Ответ 6. Будьте осторожны!

Итак, экспериментальным путем мы выяснили, что состояние объекта меняться, и код выполняется меняя состояние в JVM. Это стоит запомнить и держать в уме.

Продвинутая работа с breakpoint’s

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

Дополнительные опции breakpoint-a

По нажатию на правую кнопку мышки на breakpoint появляется вот такое меню.

Enabled — можно включить/выключить точку остановки не удаляя ее.

Suspend — флаг для включения/выключения остановки выполнения потока во время достижения точки остановки. А еще есть возможность выбрать что остановить — выполнение только текущего потока, на котором выполняется текущая строка кода, или вообще все потоки внутри процесса приложения.

Но зачем отключать остановку на точке остановки?

Хотите узнать зачем это нужно?

Это хороший вопрос, ведь суть точки остановки — в остановке, это даже четко обозначено в названии, но тем не менее есть еще несколько режимов работы точки остановки.

Вывод сообщения в консоль

При срабатывании точки остановки в консоль можно вывести 3 варианта сообщений:

  • Точка остановки достигнута
  • Stack-trace к точке остановки
  • Выполнить какое-то выражение и вывести его результат

Я долго искал — где в логах сообщение о том что точка остановки сработала. Оказывается эти сообщения выводятся не в Logcat а в консоль во вкладке Debug:

Кстати, на этом скриншоте видно 2 первых типа сообщения: “точка остановки достигнута” и stack-trace.

И вариант вывода в логи результат выполнения выражения:

Маленький перерыв для глаз)

Условия для срабатывания точки остановки

А еще есть удобная возможность настроить точку остановки чтоб она:

  • Сработала один раз и удалилась.
  • Активировалась только после срабатывания другой точки остановки или если будет брошено Exception

Одноразовая точка выглядит так:

“Сработать после” выглядит так:

А выбор когда именно сработать выглядит так:

Здесь видно можно выбрать еще опции связанные с Exception’s.

Ну и это еще не все настройки;) Еще, для точки остановки, которая включается по условию, можно указать такие вещи:

  • Сработать один раз и отключится
  • Быть включенной всегда

Debug like a pro

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

Но тема еще не раскрыта, а статья уже получилась немаленькая, поэтому я решил что будет лучше на этом пока закончить и продолжить в третей, последней статьи из этой серии.

Если у вас есть советы или опыт связанный с тестированием — смело пишите мне и я с радостью добавлю это в эти статьи.