
Краткая инструкция по чтению и разбору логов мобильных устройств на Android и iOS, а также необходимые инструменты для Windows и MacOS.
Статья подготовлена red_mad_robot и «Альфа-Банком» на основе доклада Senior QA red_mad_robot Ольги Никитиной «Инструменты для снятия логов с Android / iOS устройств. Чтение и разбор» на митапе «QАчественное общение» при поддержке red_mad_robot.
Уровни логирования и что они означают
Для начала разберёмся с логами. Это текстовые файлы, в которых записываются все действия пользователя. Например, какие кнопки он нажимает в приложении и как на это оно реагирует в ответ.
Записи в логах формируются в хронологическом порядке. Самая свежая — внизу.
Есть два вида логов:
-
Crash logs — файл, в котором хранятся записи только об ошибках экстренного завершения программы — по-простому, когда приложение крашнулось.
-
Logs — простые логи, или журнал событий. Это файл, в котором хранятся системные записи и ответы устройства на действие пользователя.
Логи на мобильных устройствах бывают нескольких уровней:
-
ERROR,
-
WARN,
-
INFO,
-
DEBUG,
-
VERBOSE.
Они представлены по уровню важности — от самого высокого к самому низкому, — и каждый следующий уровень включает в себя предыдущий. Например, VERBOSE содержит в себе логи всех остальных.
Примечание: уровни более применимы к логам на Android, потому что именно там такое разделение встречается чаще.
Рассмотрим подробнее каждый уровень.
Error (ERROR)
На этом уровне информируются ошибки работы системы.
Записи этого уровня требуют быстрого вмешательства разработчика — на такие ошибки нужно реагировать максимально быстро.
Как пример, такая запись в логе:
“ SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length ”
Это ошибка, в которой говорится, что строковый элемент span не может быть пустым.
Или вот:
“ [ZeroHung]zrhung_get_config: Get config failed for wp[0x0008] ] ”
Эта системная ошибка сообщает, что происходит утечка памяти при взаимодействии с каким-то элементом или приложением.
Warning (WARN)
На этом уровне отображаются записи, сообщающие о каком-то неожиданном поведении, требующем внимания, или о ситуации, которая незнакома системе.
Например, сообщение ниже — запись из тестового приложения:
“ [OMX.hisi.video.decoder.avc] setting nBufferCountActual to 16 failed: -2147483648 “
Мы пытаемся декодировать запись в какой-то формат, но его нет. Ошибка сообщает о неуспешной попытке настройки видеоплеера в нужном формате.
Ещё пример:
“ BroadcastQueue: Permission Denial: broadcasting Intent ”
Эта системная ошибка говорит о сбое в работе одного из виджетов на устройстве.
Info (INFO)
На этот уровень приходят записи информационного характера, например о работе системы.
Допустим, такое сообщение об уровне заряда батареи на устройстве:
“ APwBatteryMonitor: screen off start battery: 100 ”
А это сообщение говорит о том, что экран устройства был выключен:
“ HwBatteryService: intent = Intent { act=android.intent.action.SCREEN_OFF flg=0x58200010 } ”
Ещё в логи этого уровня входят запросы от клиента на сервер: хедеры, тело запросов, которые отправляет клиент, и ответы сервера.
“ okhttp.OkHttpClient: <— 200 https://domainname/api/v1/smth/deals (1691ms)
okhttp.OkHttpClient: server: nginx/1.15.9
okhttp.OkHttpClient: date: Thu, 23 Sep 2021 19:41:17 GMT
okhttp.OkHttpClient: content-type: application/json
okhttp.OkHttpClient: vary: Accept-Encoding
okhttp.OkHttpClient: strict-transport-security: max-age=15724800; includeSubDomains
okhttp.OkHttpClient: {«key»:{«key»:value,»name»:»»},»key»:value,»key»:value}
okhttp.OkHttpClient: <— END HTTP ”
Такие записи могут помочь вам в понимании какого-то бага или в разборе задачи при условии, что вы не можете перехватить трафик или не знаете, какие запросы отправляются на бэкенд.
Debug (DEBUG)
Это уровень сообщений, в которых передаётся информация о процессах отладки или шагах работы крупных процессов.
Например, в записи ниже сказано, что пользователь нажимал на кнопку уменьшения или увеличения громкости:
“ MediaSessionService: dispatchVolumeKeyEvent ”
Сначала мы видим запись о самом факте нажатия на кнопку, далее оно расшифровывается подробнее:
{ action=ACTION_DOWN, keyCode=KEYCODE_VOLUME_UP }
Ещё пример: если ваше приложение использует сокет-сессию, то на уровне DEBUG мы можем увидеть, когда сессия начинается и заканчивается:
“ b$b: WebSocket connected ”
Verbose (VERBOSE)
Сообщения такого уровня уточняют или раскрывают действия.
Например, у нас есть служба управления окнами на экране приложения. И на уровне Verbose мы можем увидеть подробности её работы.
Открытие окна:
WindowManager: addWindow
Закрытие окна:
WindowManager: Removing Window
На этом уровне мы можем посмотреть системные подробности наших действий. Например, при включении геолокации в записи отобразится текущая геолокация.
GnssLocationProvider: reportLocation Location […]
А меняя звук на устройстве, мы увидим, как растёт или падает значение:
AudioManager: getStreamVolume streamType: 3 volume: 10
Каждое нажатие, то есть изменение звука, будет отражаться новым сообщением.
Verbose — уровень самого низкого приоритета. Выбирая такой уровень отображения логов, мы будем видеть записи и со всех предыдущих уровней.
Примечание: разработчики приложения самостоятельно покрывают действия логами, определяют уровни, а также какие сообщения какому из них соответствуют.
Инструменты для снятия логов: Android
Расскажем о трёх способах.
Первый — Logcat в составе Android Studio, самый известный и широко используемый.
Для снятия логов нам необходимо перевести устройство в режим разработчика/отладки. Для этого нужно:
-
найти в настройках номер нашего билда или ОС (в зависимости от устройства),
-
около десяти раз нажать на эту информацию,
-
при появлении сообщения о том, не хотим ли мы перевести устройство в режим разработчика, нажать «Ок».
Примечание: алгоритм может отличаться в зависимости от производителя устройства, потому что у многих из них свои надстройки на ОС Android.
Дальше подключаем устройство по USB к ПК и устанавливаем Android Studio.
Следующие шаги на скрине:
-
Выбираем вкладку Logcat (переходим к сообщениям в реальном времени).
-
В окошке выбираем телефон, с которого снимаем логи.
-
На этой вкладке выбираем логи определённого приложения. Если нужно снять вообще все логи со всех приложений и системы, эту вкладку стоит не трогать. Рядом с ней можно выбрать уровень логирования (вкладка Verbose на скрине).
-
В поле поиска, где мы можем фильтровать выдачу, разрешено писать что угодно — от названия пакета до частей вроде fatal.
На скрине видно логи с подключенного устройства.
Второй способ — выгрузка логов с самого устройства. Кроме режима разработчика нам нужно подключить устройство к ПК через USB и установить ADB — Android Debug Bridge.
Открываем терминал и пишем две команды.
Первая — adb devices — показывает подключённые устройства, которые видит ADB. В терминале выглядит так:
Вводим вторую команду — adb -s название устройства logcat, — которая запускает утилиту Logcat для конкретного устройства. В терминале в реальном времени будут поступать логи.
Как их читать?
-
В первом столбце — дата и время поступления записи.
-
Во втором — обозначения уровней логирования. Например, D — это Debug.
-
В третьем показываются названия инструмента, утилиты, пакета, от которых поступает сообщение, а также расшифровка того, что вообще происходит.
Третий инструмент — SDK Platform Tools. Процесс его установки практически аналогичен предыдущим двум:
-
переводим телефон в режим разработчика,
-
подключаем к ПК по USB,
-
скачиваем на ПК папку SDK PT (под свою ОС),
-
открываем папку SDK PT в терминале.
Теперь пишем команду ./adb logcat –v threadtime > ./android-debug.log.
В терминале это выглядит так:
Прерываем выполнение команды (например, на Mac это Control+C). Лог добавляется в папку.
Открываем:
Очень похоже на предыдущий терминал, но файл обновляется, пока в терминале действует команда.
Инструменты снятия логов: iOS
В первую очередь нас интересует xCode — интегрированная среда разработки (IDE), в которую встроен нужный нам инструмент Simulator.
Как использовать инструмент:
-
Устанавливаем xCode.
-
В системной строке нажимаем xCode → Open Developer Tools → Simulator.
-
Устанавливаем приложение.
-
В самом симуляторе выбираем Debug → Open System Log.
Мы будем видеть логи в реальном времени:
Подобное оформление логов мы уже где-то видели, но построение информации в выдаче немного отличается. Есть дата и время (1) и данные (2) о том, с какого устройства снята информация: имя компьютера, элемент системы, с которого пришло сообщение, и его расшифровка.
Но первый способ работает только с симуляторами. Если необходимо снимать логи с реального устройства, в этом может помочь раздел Devices and Simulators.
Записи можно отфильтровать по конкретному процессу (вашему приложению):
-
Устанавливаем xCode.
-
Подключаем устройство к ПК по USB.
-
Открываем xCode → Windows → Devices and Simulators.
Дальше нажимаем у устройства Open Console и видим панель с названием устройства, информацией о модели и ОС:
Логи поступают в реальном времени, но их удобно отслеживать:
У нас есть три столбца:
-
«Время» — время поступления сообщения.
-
«Процесс» — с какой части системы/приложения пришло сообщение.
-
«Сообщение» — описание события, сервисная информация.
В инструменте есть поиск для фильтрации выдачи. Ещё есть полезная кнопка «Приостановить» — она останавливает поток логов.
А вот утилита iMazing поможет снимать iOS-логи для тех, у кого установлен Windows. Приложение платное, но часть функциональности доступна бесплатно. Например, за снятие логов устройства платить не нужно.
В меню выбираем «Показать консоль устройства». В открывшемся окне приходят записи логов в реальном времени со всего устройства.
Ещё одно важное достоинство iMazing — возможность сохранять логи (разумеется, по кнопке «Сохранить»).
Статья подготовлена red_mad_robot и «Альфа-Банком» на основе доклада Senior QA red_mad_robot Ольги Никитиной «Инструменты для снятия логов с Android / iOS устройств. Чтение и разбор» на митапе «QАчественное общение» при поддержке red_mad_robot.
Перейти к содержимому
Существует несколько способов просмотреть логи с iOS-устройства.
1. Через само устройство — в этом случае посмотреть можно лишь только краш-репорты (crashlog), но ведь это самое то для тестировщика! Идем в «Settings» -> «General» -> «About» -> «Diagnostic & Usage» -> «Diagnostic & Usage Data» и смотрим все доступные отчеты о падении приложений. Единственная проблема заключается в том, что здесь нет удобного средства для экспорта этих самых отчетов. Тем не менее, при крайней необходимости можно скопировать нужный участок лога через стандартную функцию копирования текста.
2. Через XCode — к сожалению, среда разработки XCode доступна исключительно для MacOS. По этой и многим другим причинам было бы неплохо, если тестировщики iOS-приложений имели в своем распоряжении хотя бы Mac mini. Для просмотра краш-репортов нужно подключить iOS-устройство к компьютеру, нажать кнопку «Use for Development», после чего в разделе «Device Logs» уже можно непосредственно просматривать логи и, что не маловажно, импортировать их!
3. Через программу «iPhone Configuration Utility» — хотя основная функция этой утилиты заключается в настройки профилей для iOS-устройств, в ней имеется консоль, куда выводятся все логи с подключенного устройства. Незаменимая вещь для тестировщика. К тому же, утилита доступна и для Windows.
4. Через синхронизацию iTunes — каждый раз, когда вы синхронизируете свое iOS-устройство с iTunes на компьютере, логи сохраняются в следующие директории:
Mac OS X:
~/Library/Logs/CrashReporter/MobileDevice/<DEVICE_NAME>
Windows XP
C:Documents and Settings<USERNAME>Application DataApple ComputerLogsCrashReporterMobileDevice<DEVICE_NAME>
Windows Vista or 7
C:Users<USERNAME>AppDataRoamingApple ComputerLogsCrashReporterMobileDevice<DEVICE_NAME>
If any iOS app crashes some crash logs are generated on behalf of that app.
How to find the location of such crash logs. Please help.
I want crash logs inside the iPhone/iPad, not really using XCode to see the crash logs.
asked Jun 25, 2014 at 4:51
user249605user249605
2292 gold badges3 silver badges8 bronze badges
you can find crash report on iPad/iphone below location for iOS:
IOS7 & Below = Settings —> General —> About —> Diagnostics & Usage —> Diagnotstic & Usage Data
IOS8 & IOS9 = Settings —> Privacy —> Diagnostics & Usage —> Diagnotstic & Usage Data
IOS10 & Above = Settings —> Privacy —> Analytics —> Analytics Data
answered Apr 8, 2015 at 9:52
JashuJashu
1,04113 silver badges19 bronze badges
1
I think he/she asked about crash logs inside the iPhone/iPad, not really using XCode to see the crash logs.
To check the crash logs inside iPhone/iPad, you have to go to
Settings -> General -> About -> Diagnostics & Usage -> Diagnostic & Usage Data
You will see the crash log with the Title APPName_Date….
Attached the screen shot of one of the crash logs below:-
answered Jun 25, 2014 at 5:16
RickyRicky
10.5k6 gold badges36 silver badges49 bronze badges
0
👉 https://support.apple.com/en-in/HT202100
IOS 7 & Below = Settings —> General —> About —> Diagnostics & Usage —> Diagnotstic & Usage Data
IOS 8 & Above = Settings —> Privacy —> Diagnostics & Usage —> Diagnotstic & Usage Data
IOS 10.2 = Settings —> Privacy —>Analytics —> Diagnotstic & Usage Data
IOS 10.3.2 and Above = Settings —> Privacy —> Analytics —> Analytics Data
answered May 2, 2017 at 5:06
MAhipal SinghMAhipal Singh
4,7451 gold badge42 silver badges56 bronze badges
1
From Apple Docs:
Even though you won’t be able to run the app in Xcode’s debugger, Xcode can still give you all the information you need to debug the problem.
1) Plug in the device and open Xcode
2) Open the Organizer window and select the Devices tab
3) Under the DEVICES section in the left column, expand the listing for the device
4) Select Device Logs to see crash logs or select Console to see Console output
OR
answered Jun 25, 2014 at 4:55
2
Если вы устраняете сбои приложения, бета-тестируете приложение или просто хотите помочь разработчику iOS после обнаружения конкретной ошибки, вы можете получать отчеты о сбоях из любого приложения на устройстве iPhone, iPad или iPod touch. как только он будет синхронизирован с компьютером.
Поиск данных отчета о сбоях для iOS можно выполнить вне Xcode, если в любом случае вы сделаете резервную копию устройства на компьютер. В статье показано, как найти журналы сбоев iOS в Mac OS X и ПК с Windows.
Доступ к журналам сбоев iOS на Mac
Для Mac OS X:
- Подключите iPad или iPhone к Mac и синхронизируйте его как обычно
- Нажмите Command + Shift + G и перейдите в ~ / Library / Logs / CrashReporter / MobileDevice /
- Для тех, у кого несколько устройств iOS, выберите подходящее устройство, с которого вы хотите получить журнал сбоев.
- Найдите файлы с именем приложения, из которого вы хотите получать отчеты о сбоях, скопируйте их из папки или скопируйте несколько журналов и заархивируйте их для разработчика.
Получение отчетов о сбоях iPhone и iPad на ПК с Windows
Для ПК с Windows:
- Синхронизируйте устройство iOS с iTunes, затем посмотрите в следующих местах:
- Windows XP: C: Documents and Settings USER Application Data Apple computer Logs CrashReporter
- Windows Vista и Windows 7: C: Users USER AppData Roaming Apple computer Logs CrashReporter MobileDevice
- Найдите соответствующее имя устройства, затем найдите файл по имени приложения и отметке времени.
Независимо от того, получаете ли вы журнал сбоев с ПК или Mac, если устройство такое же, данные журнала сбоев должны быть одинаковыми.
Благодаря TC за подсказку, дополнительную информацию можно найти на Библиотека Apple Dev.
логи прошивки это просто подробная инфа ошибок,т.е. окошко на котором в тюнце выскочила ошибка -1,это понятие ростяжимое и только извесно что проблема в модемной части,либо нет питания модема либо епром и т п,по нею кроются еще много ошибок которые подсказывают намного точнее куда копать,а вот как раз в логах и кроются эти подсказки,можна и ошибку 50 увидеть и еще кучу всяких,типа 27,28,вот кто много перебрал афоней,тот уже почти на изусть знает,все приходит с опытом,нужно знать где когда и какие напруги должны быть,и даже при прошивке они вичисляются легко,и даже если ошибка -1,это далеко не значит что проблема в модемном проце,просто банально нет питания бб,а тут и ошибка в логах подскажет (ошибка 50) а не строго -1,потому он не отзывается при прошивке…я во многих темах детально описывал разные шаги по разных ошибках…а еще очень полезно знать поочередность прошиваемых частей ТА,это минимум который должен знать любой мастер,а уж тогда изучать ошибки и их логи.



















