Аварийное завершение приложения — более чем неприятная ситуация. Особенно неприятно, если она случается уже на устройстве пользователя, когда нет возможности запустить отладчик и найти проблему. Тут и приходят на помощь разработчику системы отправки и анализа отчетов о падениях и техники postmortem debugging'а. Поговорим о существующих системах аналитики крэшей и чем они полезны для C++ разработчика.
3. 2
Крэш — это такое состояние программы (приложения или
операционной системы), в котором дальнейшее корректное
её выполнение не представляется возможным.
COREHARD // ВВЕДЕНИЕ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
ЧТО ТАКОЕ CRASH?
5. 4
COREHARD // ОТКУДА БЕРУТСЯ КРЭШИ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
ПРИЧИНЫ КРЭШЕЙ ПРИЛОЖЕНИЙ
Основные причины крэшей приложений
• Необработанное исключение или сигнал;
• Попытка чтения (или записи) памяти по адресу, не выделенному приложению для
чтения (или записи);
• Переполнение стека;
• Попытка выполнить инструкцию с некорректными параметрами (деление на 0,
работа с невыровненной памятью на ARM, …);
• Попытка выполнить некорректную инструкцию или инструкцию, не доступную в
текущем режиме работы процессора;
• Некорректная работа с системными функциями (передача неверных параметров,
недостаточные полномочия, нехватка памяти, …), нарушение целостности
системных объектов;
• Вызов std::terminate или std::abort при серьезных нарушениях логики работы
приложения, после которых дальнейшее его выполнение не имеет смысла.
6. 5
COREHARD // ОТКУДА БЕРУТСЯ КРЭШИ /
ЛАПИЦКИЙ АРТЁМ // COREHARD // 22.10.2016
КРЭШИ И ПОЛЬЗОВАТЕЛИ
Для пользователя крэш – это больше чем неудобство
• Внезапное завершение приводит к потере контекста работы с
приложением, восстановить который может быть сложно или даже
невозможно;
• Крэш может привести к потере данных пользователя, перехода
данных приложения в противоречивое или некорректное состояние;
• Катастрофически ухудшается пользовательский опыт.
7. 6
COREHARD // ОТКУДА БЕРУТСЯ КРЭШИ /
ЛАПИЦКИЙ АРТЁМ // COREHARD // 22.10.2016
НЕПРИЯТНОСТИ СЛУЧАЮТСЯ
Контроль качества не способен выявить все возможные проблемы
• Разнообразие устройств;
• Разнообразие операционных систем;
• Разнообразие программного окружения;
• Ошибки при разработке приложения;
• Ошибки в сторонних библиотеках и системных API;
• Ошибки в инструментарии разработки.
9. 8
COREHARD // РАССЛЕДОВАНИЕ КРЭША /
ЛАПИЦКИЙ АРТЁМ // COREHARD // 22.10.2016
РАССЛЕДОВАНИЕ ПРИЧИН КРЭША
Исходные данные
• Описание проблемы пользователем;
• Stack trace потоков приложения в момент падения;
• Дамп памяти;
• Логи работы приложения / breadcrumbs;
• Информация об окружении и логическом состоянии приложения.
10. 9
Stack trace — это отчет о
состоянии стека вызовов
приложения в конкретный
момент времени,
представляющий из себя
список активных stack
frame’ов;
Его анализ позволяет точно
локализовать место
возникновения крэша и
узнать последовательность
вызовов, которая к нему
привела.
COREHARD // РАССЛЕДОВАНИЕ КРЭША /
ЛАПИЦКИЙ АРТЁМ // COREHARD // 22.10.2016
STACK TRACE
11. 10
Memory dump — это
содержимое памяти
приложения в конкретный
момент времени;
Будучи загруженным в
отладчике он позволяет
изучить состояние программы
в момент его создания (так,
будто бы отладчик был вызван
на точке останова).
COREHARD // РАССЛЕДОВАНИЕ КРЭША /
ЛАПИЦКИЙ АРТЁМ // COREHARD // 22.10.2016
MEMORY DUMP
12. 11
Анализ логов поможет
изучить работу упавшего
приложения в течение всего
времени его жизни;
В отличие от других данных,
логи позволяют обнаружить
причину крэша даже тогда,
когда момент возникновения
проблемы и момент
«падения» разделены во
времени и не связаны
цепочкой вызовов.
COREHARD // РАССЛЕДОВАНИЕ КРЭША /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
ЛОГИ РАБОТЫ ПРИЛОЖЕНИЯ
13. 12
При анализе проблемы или
попытке ее воспроизвести
очень полезно иметь
сведения об устройстве и
его компонентах, версии
операционной системы и
драйверов, значений
системных счетчиков,
состоянии дисков и
оперативной памяти,
статуса соединения с сетью
и другой информации о
состоянии среды, в которой
выполнялось приложение.
COREHARD // РАССЛЕДОВАНИЕ КРЭША /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
ИНФОРМАЦИЯ ОБ ОКРУЖЕНИИ
14. 13
Системы аналитики отчетов о падении автоматизируют
процесс сбора, обработки и группировки крэшей,
возникающих на устройствах пользователей;
Зачастую являются частью более общих решений по
аналитике и дистрибуции приложений.
COREHARD // РАССЛЕДОВАНИЕ КРЭША /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
СИСТЕМЫ АНАЛИТИКИ КРЕШЕЙ СПЕШАТ НА ПОМОЩЬ
15. 14
Группировка похожих крэшей, которые вызваны одной и той же
проблемой;
Анализ возникающих проблем в динамике с уведомлением о статусе
крэшей с наибольшим эффектом;
Телеметрия и различные дополнительные метрики (сколько
пользователей онлайн, количество новых пользователей, количество
crash-free пользователей и т.д.);
Удобная навигация по группам и отдельным отчетам, фильтрация и
поиск;
API для реализации своих сценариев анализа отчетов;
Интеграция с популярными багтерекерами и системами управления
проектами.
COREHARD // РАССЛЕДОВАНИЕ КРЭША /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
ПОЛЕЗНЫЕ ФУНКЦИИ
18. 17
COREHARD // АНАЛИТИКА КРЭШЕЙ ОТ ПЛАТФОРМОДЕРЖАТЕЛЕЙ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
АНАЛИТИКА КРЭШЕЙ ОТ ПЛАТФОРМОДЕРЖАТЕЛЕЙ
Windows Error Reporting (Watson)
• Позволяет создавать отчеты о сбоях, прикреплять к ним дампы памяти и
содержимое отдельных блоков памяти программы, дополнительные файлы и
параметры;
• Работает автоматически для всех приложений, не обрабатывающих крэши
самостоятельно, отправляя базовый отчет об ошибке и минидамп;
• Отчеты об ошибках приложений отправляются в службу Windows Quality
Online Services, зарегистрировавшись в которой, можно получить к ним
доступ.
19. 18
COREHARD // АНАЛИТИКА КРЭШЕЙ ОТ ПЛАТФОРМОДЕРЖАТЕЛЕЙ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
АНАЛИТИКА КРЭШЕЙ ОТ ПЛАТФОРМОДЕРЖАТЕЛЕЙ (2)
Microsoft Dev Center
• Предоставляет доступ к информации о сбоях приложений из Windows Store (Windows
Universal Platform, Windows Phone 7/8);
• Производит символизацию stack trace’ов, по которым группирует возникшие проблемы;
• Стандратный обработчик крэшей для приложений из Windows Store срабатывает
автоматически, отправляя отчет в Microsoft.
20. 19
COREHARD // АНАЛИТИКА КРЭШЕЙ ОТ ПЛАТФОРМОДЕРЖАТЕЛЕЙ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
АНАЛИТИКА КРЭШЕЙ ОТ ПЛАТФОРМОДЕРЖАТЕЛЕЙ (3)
Apple Crash Report Service
• Позволяет прямо из XCode просматривать отчеты о падении вашего приложения
для MacOS или iOS, которые отправили пользователи;
• Символизирует stack trace и группирует отчеты по ним;
• Доступная информация ограничивается stack trace’ом и небольшим количеством
сведений об устройствах и операционных системах, на которых произошел сбой;
• Работает автоматически для приложений, не обрабатывающих крэши
самостоятельно.
21. 20
COREHARD // АНАЛИТИКА КРЭШЕЙ ОТ ПЛАТФОРМОДЕРЖАТЕЛЕЙ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
АНАЛИТИКА КРЭШЕЙ ОТ ПЛАТФОРМОДЕРЖАТЕЛЕЙ (4)
Android Market Crash Reports
• Предоставляет доступ к отчетам об ошибках, которые присылают
пользователи;
• Обработчик крэшей вызывается для необработанных исключений
управляемого кода, поэтому отчетов о крэшах в C++/NDK приложениях
или библиотеках увидеть не удастся.
23. 22
COREHARD // АНАЛИТИКА КРЭШЕЙ ОТ СТОРОННИХ РАЗРАБОТЧИКОВ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
ПОДДЕРЖКА ПЛАТФОРМ (ПО СОСТОЯНИЮ НА ОКТЯБРЬ 2016)
SDK NDK .NET Native .NET Native
B B
B Limited B Limited
24. 23
Отправка отчетов как о крэшах, так и об обработанных
исключениях;
Включение в отчет пользовательской метаинформации;
Breadcrumbs — последовательность значимых изменений в
состоянии приложения или системы; многие события
логируются автоматически.
COREHARD // АНАЛИТИКА КРЭШЕЙ ОТ СТОРОННИХ РАЗРАБОТЧИКОВ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
APTELIGENT
25. 24
Глубокий анализ и приоритезация крэшей согласно их массовости и
частоте;
Интегрируется с популярными багтрекерами;
В отчетах предоставляет достаточно много информации о состоянии
устройства и ОС в момент падения;
Позволяет создавать отчеты не только при крэше, но и для обработанных
исключений;
В клиентской библиотеке есть собственный логгер; полученный лог
прикрепляется к отчету;
Есть возможность задания пользовательских параметров, которые будут
добавлены в отчет;
Является также системой распространения сборок приложения.
COREHARD // АНАЛИТИКА КРЭШЕЙ ОТ СТОРОННИХ РАЗРАБОТЧИКОВ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
CRASHLYTICS
26. 25
COREHARD // АНАЛИТИКА КРЭШЕЙ ОТ ПЛАТФОРМОДЕРЖАТЕЛЕЙ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
HOCKEYAPP
Поддерживает множество платформ, в т.ч. позволяет
отправлять отчеты, созданные библиотекой Google Breakpad;
Есть телеметрия (пользовательская активность, crash free
пользователи);
Позволяет прикреплять к отчетам логи, дополнительные
файлы и параметры;
Является также системой распространения сборок
приложений;
Поддерживает интеграцию с подавляющим большинством
популярных багтрекеров.
27. 26
Включайте в отчеты об ошибках только техническую
информацию, которая необходима для последующего решения
проблем. Никогда не логируйте идентификаторы, пин-коды,
ключи, пароли, токены и прочую информацию, которой могут
воспользоваться злоумышленники для несанкционированных
действий от имени пользовтаеля или вашей системы;
Уважайте приватность ваших пользователей и не включайте
личную информацию (e-mail, номер телефона, списки контактов)
в отчеты об ошибках.
COREHARD // СОВЕТЫ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
ЛОГИРУЙТЕ РАЗУМНО