Перейти к содержимому

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

  • автор:

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

Для всех приложений

Общие вопросы

Как получить лог-файл Android-смартфона

Статья обновлена: 24 апреля 2019 ID: 13048

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

Как включить режим отладки

Для сбора технической информации на смартфоне разрешите режим отладки из инструментария для разработчиков. По умолчанию доступ к нему отключен. Чтобы получить доступ:

  1. В меню настроек нажмите пункт Об устройстве (О телефоне и т.п.).

Об устройстве

  1. Найдите пункт меню Номер сборки (он может находиться, например, в разделе Версия ПО).

Номер сборки

  1. Несколько раз подряд нажмите на Номер сборки, пока не появится сообщение «Вы разработчик».

Включение режима разработки

  1. Проверьте в настройках наличие нового пункта Для разработчиков.

Для разработчиков

  1. Войдите в раздел Для разработчиков и поставьте галочку в пункте Отладка через USB, затем подтвердите включение режима отладки.

Как снять логи для iOS и Android приложений

Оксана Куценко

Как снять логи для iOS и Android приложений

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

Загружаются из магазина приложений (Google Play или App Store) на мобильном устройстве.

Виды мобильных приложений:

  • Нативные
  • Веб-приложения
  • Гибридные

Распространенные причины возникновения багов в мобильных приложениях:

  • Проблемы при установке/удалении мобильных приложений
  • Проблемы с поддержкой различных версий ОС и устройств
  • Проблемы с соблюдением принципов безопасности
  • Проблемы с большим потреблением ресурсов девайса
  • Проблемы со скоростью запуска и работы приложения
  • Проблемы локализации
  • Проблемы при вращении экрана
  • Проблемы с непонятными пользователям сообщениями об ошибке
  • Проблемы при подключении к интернету
  • Проблемы, связанные с условиями работы офлайн
  • Проблемы, связанные с низким уровнем заряда батареи
  • Проблемы после перезагрузки телефона
  • Проблемы после входящих звонков и SMS

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

Логи и их виды

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

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

Виды логов

Логи мобильных приложений делятся на два основных вида: консольные (обычные) логи и креш-логи.

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

Креш-логи — это лог-файлы, которые создаются после экстренного завершения работы программы (креша). Файлы креш-логов имеют расширение .crash или .ips. Креш-логи содержат информацию с момента запуска программы и до экстренного завершения программы.

Как снять логи мобильных приложений

Существуют разные варианты снятия логов для мобильных приложений в зависимости от операционной системы телефона (Android, iOS).

Как снять логи с iOS

Одним из самых распространенных способов для получения логов для приложений iOS является получение с помощью XCode.

XCode — это среда разработки программного обеспечения для платформ macOS и iOS.

Для снятия логов через XCode необходимо:

  • Установить XCode
  • Подключите устройство к Mac
  • Запустить XCode
  • Открыть вкладку «Window» — «Devices and Simulators»
  • Нажать кнопку «View Device Logs»
  • Найти нужный лог-файл и скопировать его в текстовый файл

Также получить логи можно с помощью iMazing (доступно как для Windows, так и для MacOS).

Как снять логи с Андроид

Для того, чтобы снять с Android логи приложения, понадобится Android Studio.

Android Studio — интегрированная среда разработки (IDE) для платформы Android.

Для снятия логов с помощью Android Studio нужно:

  • Установить Android Studio
  • Создать новый проект в «Android Studio» (при создании нового проекта нужно правильно указать версию Android девайса, с которого необходимо снять логи)
  • Включить режим разработчика на Android девайсе
  • Подключить устройство через USB к компьютеру
  • Выбрать девайс в Android Studio
  • Выберите вкладку LogCat
  • Воспроизвести ошибку на девайсе или найти по дате воспроизведения логи (если мы знаем время, когда воспроизводилась проблема)
  • Выделить нужные логи и скопировать их (правой клавишей мыши → Copy или Ctrl+C)
  • Создать файл .txt, добавить в него логи и сохранить их

Также для снятия логов с Android девайсов можно использовать Minimal ADB приложение.

  1. XCode — https://developer.apple.com/xc.
  2. Android Studio — https://developer.android.com/.
  3. iMazing — https://imazing.com/download

Как посмотреть логи с устройства?

Примечание. Серверная часть работы протокола была реализована и протестирована с помощью GenieACS – программного продукта с открытым исходным кодом, который поддерживает протокол TR-069. Конфигурирование операций по удаленному управлению STB рассмотрено на примере сервера GenieACS. Обратите внимание, что Клиент TR-069 может работать с любыми ACS-сервером, поддерживающим стандарт TR-069.

1. На вкладке Devices выберите устройство, логи которого Вы хотите посмотреть.

Как посмотреть логи с устройства?

2. В Device parameters нажмите на поле InternetGatewayDevice.DeviceInfo.DeviceLogs.

Как посмотреть логи с устройства?

3. Вы увидите логи устройства. При отправке лог-файла генерируется два блока:

  • Логи TR (получение команд от сервера и их статусы)

Как посмотреть логи с устройства?

  • WARNINGs и ERRORs приставки (logcat).

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

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

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

  1. Воспроизведение ошибки — вы понимаете, какие действия нужно сделать в приложении, чтобы повторить ошибку.
  2. Поиск места ошибки — определяете класс и метод, в котором ошибка происходит.
  3. Исправление ошибки.

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

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

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

  1. Открываем Android Studio.
  2. Создаём проект с шаблоном Empty Activity.
  3. Выбираем язык Java, так как его, как правило, знают больше людей, чем Kotlin.

Узнай, какие ИТ — профессии
входят в ТОП-30 с доходом
от 210 000 ₽/мес
Павел Симонов
Исполнительный директор Geekbrains

Команда GeekBrains совместно с международными специалистами по развитию карьеры подготовили материалы, которые помогут вам начать путь к профессии мечты.

Подборка содержит только самые востребованные и высокооплачиваемые специальности и направления в IT-сфере. 86% наших учеников с помощью данных материалов определились с карьерной целью на ближайшее будущее!

Скачивайте и используйте уже сегодня:

Павел Симонов - исполнительный директор Geekbrains

Павел Симонов
Исполнительный директор Geekbrains

Топ-30 самых востребованных и высокооплачиваемых профессий 2023

Поможет разобраться в актуальной ситуации на рынке труда

Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка

Только проверенные нейросети с доступом из России и свободным использованием

ТОП-100 площадок для поиска работы от GeekBrains

Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽

Получить подборку бесплатно
Уже скачали 25512

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

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

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

public class MainActivity extends AppCompatActivity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Button button = (Button) findViewById(R.id.button); final EditText first = (EditText) findViewById(R.id.first_number_et); final EditText second = (EditText) findViewById(R.id.second_number_et); final TextView answer = (TextView) findViewById(R.id.answer_tv); button.setOnClickListener(new View.OnClickListener() < @Override public void onClick(View v) < Integer firstInt = Integer.parseInt(first.getText().toString()); Integer secondInt = Integer.parseInt(second.getText().toString()); if (firstInt == secondInt) < answer.setText("Равно"); >else < answer.setText("Равно"); >> >); > >

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

  1. Находим поля ввода, поле с текстом и кнопку.
  2. Вешаем на кнопку слушатель нажатий.
  3. По нажатию на кнопку получаем числа из полей ввода и сравниваем их.
  4. В зависимости от результата выводим «Равно» или «Не равно».

Для вас подарок! В свободном доступе до 14.01 —>
Скачайте ТОП-10
бесплатных нейросетей
для программирования
Помогут писать код быстрее на 25%
Чтобы получить подарок, заполните информацию в открывшемся окне

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

Нажмём на кнопку, и приложение упадёт! Время читать логи. Открываем внизу слева вкладку «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. Можно просто кликнуть по ссылке и перейти на указанную строку:

int firstInt = Integer.parseInt(first.getText().toString());

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

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

  • красный текст;
  • тип ошибки — в нашем случае это NumberFormatException;
  • пояснение — у нас это For input string: «f»;
  • ссылка на строку, на которой произошла ошибка — здесь видим MainActivity.java:26.

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

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

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

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

  1. Воспроизведём ошибку: да, ошибка воспроизводится стабильно с любыми двумя разными числами.
  2. Подумаем, где может быть ошибка: наверняка там, где сравниваются числа. Туда и будем смотреть.
  3. Исправим ошибку: сначала найдём её с помощью дебаггера, а когда поймём, в чём проблема, — будем исправлять.

Дарим скидку от 60%
на обучение «Android-разработчик» до 14 января
Уже через 9 месяцев сможете устроиться на работу с доходом от 150 000 рублей

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

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

Запускаем программу с помощью сочетания клавиш SHIFT+F9 или нажимаем на кнопку с жучком:

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

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

  1. Точки останова теперь помечены галочками. Это значит, что вы находитесь на экране, где стоят эти точки, и что дебаггер готов к работе.
  2. Открылось окно дебага внизу: вкладка «5: Debug». В нём будет отображаться необходимая вам информация.

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

  1. Сразу подсвечивается синим строка, где программа остановлена: в окне кода на 28-й строке и в левом окне отладчика (там даже можно увидеть, какой метод вызван, — onClick).
  2. В правом, основном окне отладчика, всё гораздо интереснее. Здесь можно увидеть инстансы наших вью (answer, first, second), в конце которых серым текстом даже отображаются их id. Но интереснее всего посмотреть на firstInt и secondInt. Там записаны значения, которые мы сейчас будем сравнивать.

Только до 11.01
Скачай подборку материалов, чтобы гарантированно найти работу в IT за 14 дней
Список документов:

ТОП-100 площадок для поиска работы от GeekBrains

20 профессий 2023 года, с доходом от 150 000 рублей

Чек-лист «Как успешно пройти собеседование»

Чтобы зарегистрироваться на бесплатный интенсив и получить в подарок подборку файлов от GeekBrains, заполните информацию в открывшемся окне

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

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

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

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

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

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

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

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

  1. Изменить тип Integer на примитив int.
  2. Сравнивать как объекты.

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

if (firstInt.equals(secondInt)) < answer.setText("Равно"); >else

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

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

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

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

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

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

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

  1. Проверять получаемые строки first.getText().toString() и second.getText().toString() на пустые значения. И если хоть одно значение пустое — говорить об этом пользователю и не вызывать метод parseInt.
  2. Или использовать уже готовую конструкцию try / catch:

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

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

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