Как посмотреть логи на андроиде

Как я могу просмотреть и изучить журнал Android?

В системном журнале Android есть много интересных вещей, которые полезны во многих отношениях.

Как я могу просмотреть и изучить журнал Android?

Android 4.1 и новее

Предпочтительным способом является загрузка SDK и его использование adb logcat (требуется активировать «параметры разработчика» на устройстве).

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

Android 4.0 и старше

Вы можете либо загрузить SDK и использовать, adb logcat либо получить Logcat Extrem из Google Play Store, где журнал отображается прямо на вашем телефоне.

Расположение файла журнала

Журнал команд для использования с терминальным приложением (или adb)

Несколько команд могут получить тонны информации. Для большинства из них рекомендуется перенаправить их в файл ( > filename.ext ) или передать через фильтр ( | grep search-for-this ):

Журнал ядра

Следующее работает без рута:

Logcat

Получение информации об устройстве

Все в одном

Сделайте большой шар со всем вместе, от logcat до dumpstate:

Что-то о разрешениях

PS: Естественно, для доступа к этой информации может потребоваться root, так как большинство источников находятся во внутренней памяти.

Источник

Гайд по отладке Android-приложения: ищем баги и читаем логи

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Иногда в приложении встречаются ошибки, которые нельзя увидеть даже после запуска. Например, код компилируется, проект запускается, но результат далёк от желаемого: приложение падает или вдруг появляется какая-то ошибка (баг). В таких случаях приходится «запасаться логами», «брать в руки отладчик» и искать ошибки.

Часто процесс поиска и исправления бага состоит из трёх шагов:

Если приложение не падает и чтение логов ничего не даёт, то найти точное место ошибки в коде помогает дебаггер (отладчик) — инструмент среды разработки.

Чтобы посмотреть на логи и воспользоваться дебаггером, давайте напишем простое тестовое (и заведомо неправильное) приложение, которое даст нам все возможности для поиска ошибок.

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

Нам автоматически откроются две вкладки: activity_main.xml и MainActivity.java. Сначала нарисуем макет: просто замените всё, что есть в activity_main.xml, на код ниже:

Можете запустить проект и посмотреть, что получилось:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Теперь оживим наше приложение. Скопируйте в MainActivity этот код:

В этом коде всё просто:

Запустим приложение и введём буквы вместо чисел:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Нажмём на кнопку, и приложение упадёт! Время читать логи. Открываем внизу слева вкладку «6: Logcat» и видим:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Читать логи просто: нужно найти красный текст и прочитать сообщение системы. В нашем случае это java.lang.NumberFormatException: For input string: «f». Указан тип ошибки NumberFormatException, который говорит, что возникла какая-то проблема с форматированием числа. И дополнение: For input string: «f». Введено “f”. Уже можно догадаться, что программа ждёт число, а мы передаём ей символ. Далее в красном тексте видно и ссылку на проблемную строку: at com.example.appdebugging.MainActivity$1.onClick(MainActivity.java:26). Проблема в методе onClick класса MainActivity, строка 24. Можно просто кликнуть по ссылке и перейти на указанную строку:

Конечно, метод parseInt может принимать только числовые значения, но никак не буквенные! Даже в его описании это сказано — и мы можем увидеть, какой тип ошибки этот метод выбрасывает (NumberFormatException).

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Здесь мы привели один из примеров. Типов ошибок может быть огромное количество, все мы рассматривать не будем. Но все ошибки в Logcat’е указываются по похожему принципу:

Исправим эту ошибку и обезопасим себя от некорректного ввода. Добавим в наши поля ввода android:inputType=»number», а остальной код оставим без изменений:

Теперь можем вводить только числа. Проверим, как работает равенство: введём одинаковые числа в оба поля. Всё в порядке:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

На равенство проверили. Введём разные числа:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Тоже равно. То есть приложение работает, ничего не падает, но результат не совсем тот, который требуется. Наверняка вы и без дебаггинга догадались, в чём ошибка, потому что приложение очень простое, всего несколько строк кода. Но такие же проблемы возникают в приложениях и на миллион строк. Поэтому пройдём по уже известным нам этапам дебаггинга:

И здесь на помощь приходит отладчик. Для начала поставим точки останова сразу в трёх местах:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Чтобы поставить или снять точку останова, достаточно кликнуть левой кнопкой мыши справа от номера строки или поставить курсор на нужную строку, а затем нажать CTRL+F8. Почему мы хотим остановить программу именно там? Чтобы посмотреть, правильные ли числа сравниваются, а затем определить, в какую ветку в нашем ветвлении заходит программа дальше. Запускаем программу с помощью сочетания клавиш SHIFT+F9 или нажимаем на кнопку с жучком:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Появится дополнительное окно, в котором нужно выбрать ваш девайс и приложение:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Вы в режиме дебага. Обратите внимание на две вещи:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Введём неравные числа и нажмём кнопку «РАВНО?». Программа остановилась на первой точке:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Как видим, значения именно такие, какие мы и ввели. Значит, проблема не в получении чисел из полей. Давайте двигаться дальше — нам нужно посмотреть, в правильную ли ветку мы заходим. Для этого можно нажать F8 (перейти на следующую строку выполнения кода). А если следующая точка останова далеко или в другом классе, можно нажать F9 — программа просто возобновит работу и остановится на следующей точке. В интерфейсе эти кнопки находятся здесь:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроидеКак посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Остановить дебаггер, если он больше не нужен, можно через CTRL+F2 или кнопку «Стоп»:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

В нашем случае неважно, какую кнопку нажимать (F9 или F8). Мы сразу переходим к следующей точке останова программы:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Ветка правильная, то есть логика программы верна, числа firstInt и secondInt не изменились. Зато мы сразу видим, что подпись некорректная! Вот в чём была ошибка. Исправим подпись и проверим программу ещё раз.

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроидеКак посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Мы уже починили два бага: падение приложения с помощью логов и некорректную логику (с помощью отладчика). Хеппи пас (happy path) пройден. То есть основная функциональность при корректных данных работает. Но нам надо проверить не только хеппи пас — пользователь может ввести что угодно. И программа может нормально работать в большинстве случаев, но вести себя странно в специфических состояниях. Давайте введём числа побольше и посмотрим, что будет:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Не сработало — программа хочет сказать, что 1000 не равна 1000, но это абсурд. Запускаем приложение в режиме отладки. Точка останова уже есть. Смотрим в отладчик:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Числа одинаковые, что могло пойти не так? Обращаем внимание на тип переменной — Integer. Так вот в чём проблема! Это не примитивный тип данных, а ссылочный. Ссылочные типы нельзя сравнивать через ==, потому что будут сравниваться ссылки объектов, а не они сами. Но для Integer в Java есть нюанс: Integer может кешироваться до 127, и если мы вводим по единице в оба поля числа до 127, то фактически сравниваем просто int. А если вводим больше, то получаем два разных объекта. Адреса у объектов не совпадают, а именно так Java сравнивает их.

Есть два решения проблемы:

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

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Всё работает. Наконец-то! Хотя… Давайте посмотрим, что будет, если пользователь ничего не введёт, но нажмёт на кнопку? Приложение опять упало… Смотрим в логи:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Опять NumberFormatException, при этом строка пустая. Давайте поставим точку останова на 26-й строке и заглянем с помощью отладчика глубже.

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Нажмём F8 — и перейдём в глубины операционной системы:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Интересно! Давайте обернём код в try/catch и посмотрим ошибке в лицо. Если что, поправим приложение. Выделяем код внутри метода onClick() и нажимаем Ctrl+Alt+T:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Выбираем try / catch, среда разработки сама допишет код. Поставим точку останова. Получим:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Запускаем приложение и ловим ошибку:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Действительно, как и в логах, — NumberFormatException. Метод parseInt выбрасывает исключение, если в него передать пустую строку. Как обрабатывать такую проблему — решать исключительно вам. Два самых простых способа:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Теперь-то точно всё в порядке! Хотя профессиональным тестировщикам это приложение никто не отдавал: поищете ещё ошибки? 🙂

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Иногда в приложении встречаются ошибки, которые нельзя увидеть даже после запуска. Например, код компилируется, проект запускается, но результат далёк от желаемого: приложение падает или вдруг появляется какая-то ошибка (баг). В таких случаях приходится «запасаться логами», «брать в руки отладчик» и искать ошибки.

Часто процесс поиска и исправления бага состоит из трёх шагов:

Если приложение не падает и чтение логов ничего не даёт, то найти точное место ошибки в коде помогает дебаггер (отладчик) — инструмент среды разработки.

Чтобы посмотреть на логи и воспользоваться дебаггером, давайте напишем простое тестовое (и заведомо неправильное) приложение, которое даст нам все возможности для поиска ошибок.

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

Нам автоматически откроются две вкладки: activity_main.xml и MainActivity.java. Сначала нарисуем макет: просто замените всё, что есть в activity_main.xml, на код ниже:

Можете запустить проект и посмотреть, что получилось:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Теперь оживим наше приложение. Скопируйте в MainActivity этот код:

В этом коде всё просто:

Запустим приложение и введём буквы вместо чисел:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Нажмём на кнопку, и приложение упадёт! Время читать логи. Открываем внизу слева вкладку «6: Logcat» и видим:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Читать логи просто: нужно найти красный текст и прочитать сообщение системы. В нашем случае это java.lang.NumberFormatException: For input string: «f». Указан тип ошибки NumberFormatException, который говорит, что возникла какая-то проблема с форматированием числа. И дополнение: For input string: «f». Введено “f”. Уже можно догадаться, что программа ждёт число, а мы передаём ей символ. Далее в красном тексте видно и ссылку на проблемную строку: at com.example.appdebugging.MainActivity$1.onClick(MainActivity.java:26). Проблема в методе onClick класса MainActivity, строка 24. Можно просто кликнуть по ссылке и перейти на указанную строку:

Конечно, метод parseInt может принимать только числовые значения, но никак не буквенные! Даже в его описании это сказано — и мы можем увидеть, какой тип ошибки этот метод выбрасывает (NumberFormatException).

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Здесь мы привели один из примеров. Типов ошибок может быть огромное количество, все мы рассматривать не будем. Но все ошибки в Logcat’е указываются по похожему принципу:

Исправим эту ошибку и обезопасим себя от некорректного ввода. Добавим в наши поля ввода android:inputType=»number», а остальной код оставим без изменений:

Теперь можем вводить только числа. Проверим, как работает равенство: введём одинаковые числа в оба поля. Всё в порядке:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

На равенство проверили. Введём разные числа:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Тоже равно. То есть приложение работает, ничего не падает, но результат не совсем тот, который требуется. Наверняка вы и без дебаггинга догадались, в чём ошибка, потому что приложение очень простое, всего несколько строк кода. Но такие же проблемы возникают в приложениях и на миллион строк. Поэтому пройдём по уже известным нам этапам дебаггинга:

И здесь на помощь приходит отладчик. Для начала поставим точки останова сразу в трёх местах:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Чтобы поставить или снять точку останова, достаточно кликнуть левой кнопкой мыши справа от номера строки или поставить курсор на нужную строку, а затем нажать CTRL+F8. Почему мы хотим остановить программу именно там? Чтобы посмотреть, правильные ли числа сравниваются, а затем определить, в какую ветку в нашем ветвлении заходит программа дальше. Запускаем программу с помощью сочетания клавиш SHIFT+F9 или нажимаем на кнопку с жучком:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Появится дополнительное окно, в котором нужно выбрать ваш девайс и приложение:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Вы в режиме дебага. Обратите внимание на две вещи:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Введём неравные числа и нажмём кнопку «РАВНО?». Программа остановилась на первой точке:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Как видим, значения именно такие, какие мы и ввели. Значит, проблема не в получении чисел из полей. Давайте двигаться дальше — нам нужно посмотреть, в правильную ли ветку мы заходим. Для этого можно нажать F8 (перейти на следующую строку выполнения кода). А если следующая точка останова далеко или в другом классе, можно нажать F9 — программа просто возобновит работу и остановится на следующей точке. В интерфейсе эти кнопки находятся здесь:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроидеКак посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Остановить дебаггер, если он больше не нужен, можно через CTRL+F2 или кнопку «Стоп»:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

В нашем случае неважно, какую кнопку нажимать (F9 или F8). Мы сразу переходим к следующей точке останова программы:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Ветка правильная, то есть логика программы верна, числа firstInt и secondInt не изменились. Зато мы сразу видим, что подпись некорректная! Вот в чём была ошибка. Исправим подпись и проверим программу ещё раз.

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроидеКак посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Мы уже починили два бага: падение приложения с помощью логов и некорректную логику (с помощью отладчика). Хеппи пас (happy path) пройден. То есть основная функциональность при корректных данных работает. Но нам надо проверить не только хеппи пас — пользователь может ввести что угодно. И программа может нормально работать в большинстве случаев, но вести себя странно в специфических состояниях. Давайте введём числа побольше и посмотрим, что будет:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Не сработало — программа хочет сказать, что 1000 не равна 1000, но это абсурд. Запускаем приложение в режиме отладки. Точка останова уже есть. Смотрим в отладчик:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Числа одинаковые, что могло пойти не так? Обращаем внимание на тип переменной — Integer. Так вот в чём проблема! Это не примитивный тип данных, а ссылочный. Ссылочные типы нельзя сравнивать через ==, потому что будут сравниваться ссылки объектов, а не они сами. Но для Integer в Java есть нюанс: Integer может кешироваться до 127, и если мы вводим по единице в оба поля числа до 127, то фактически сравниваем просто int. А если вводим больше, то получаем два разных объекта. Адреса у объектов не совпадают, а именно так Java сравнивает их.

Есть два решения проблемы:

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

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Всё работает. Наконец-то! Хотя… Давайте посмотрим, что будет, если пользователь ничего не введёт, но нажмёт на кнопку? Приложение опять упало… Смотрим в логи:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Опять NumberFormatException, при этом строка пустая. Давайте поставим точку останова на 26-й строке и заглянем с помощью отладчика глубже.

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Нажмём F8 — и перейдём в глубины операционной системы:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Интересно! Давайте обернём код в try/catch и посмотрим ошибке в лицо. Если что, поправим приложение. Выделяем код внутри метода onClick() и нажимаем Ctrl+Alt+T:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Выбираем try / catch, среда разработки сама допишет код. Поставим точку останова. Получим:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Запускаем приложение и ловим ошибку:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Действительно, как и в логах, — NumberFormatException. Метод parseInt выбрасывает исключение, если в него передать пустую строку. Как обрабатывать такую проблему — решать исключительно вам. Два самых простых способа:

Как посмотреть логи на андроиде. Смотреть фото Как посмотреть логи на андроиде. Смотреть картинку Как посмотреть логи на андроиде. Картинка про Как посмотреть логи на андроиде. Фото Как посмотреть логи на андроиде

Теперь-то точно всё в порядке! Хотя профессиональным тестировщикам это приложение никто не отдавал: поищете ещё ошибки? 🙂

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *