Crashpad
Библиотека для сбора, обработки и отправки отчётов об авариях (crash reports), разработанная Google. Она предоставляет надежный механизм для захвата дампов памяти при сбоях приложений, их локального хранения и передачи на серверы для последующего анализа. Библиотека широко используется в крупных проектах для мониторинга стабильности и диагностики проблем в production-среде.
Особенности
- надежный захват дампов памяти при критических сбоях (крашах) и необработанных исключениях;
- поддержка основных платформ: Windows, macOS, Linux, Android, iOS;
- интеграция с существующими системами обработки ошибок (например, Google Breakpad);
- возможность добавления пользовательских метаданных и аннотаций в отчёты;
- настраиваемая политика отправки отчётов (немедленно, отложенно, по требованию);
- минимальное влияние на производительность работающего приложения.
Основные компоненты
Crashpad состоит из нескольких модулей, которые обеспечивают полный цикл обработки аварийных ситуаций — от момента сбоя до передачи отчёта на сервер (подробнее с документацией можно ознакомиться здесь).
Захват и создание дампов
Основная функция Crashpad — перехват сбоев и создание детализированных дампов памяти, которые содержат информацию о состоянии процесса на момент аварии. Библиотека использует низкоуровневые механизмы операционной системы для обеспечения максимальной надежности захвата.
Ключевые компоненты захвата:
crashpad::CrashpadClient— основной клиент для инициализации и управления захватом сбоев;- обработчики исключений для различных платформ (SEH на Windows, Mach исключения на macOS, сигналы на Linux/Android);
- создание минидампов (minidumps) с информацией о потоках, стеках, памяти и загруженных модулях;
- поддержка захвата сбоев в отдельных процессах через
crashpad::Handler.
Обработка и хранение отчётов
После захвата дампа Crashpad обрабатывает его, добавляет пользовательские метаданные и сохраняет в локальном хранилище. Библиотека обеспечивает целостность данных даже в условиях неожиданных сбоев системы.
Функции обработки и хранения:
crashpad::CrashReportDatabase— база данных для управления отчётами об авариях;- добавление аннотаций (ключ-значение) для контекстуализации сбоев;
- прикрепление пользовательских файлов и потоков данных к отчётам;
- сжатие и шифрование отчётов для экономии дискового пространства и безопасности;
- ротация и очистка устаревших отчётов по настраиваемым правилам.
Отправка отчётов на сервер
Crashpad предоставляет механизмы для передачи собранных отчётов на серверы разработчиков. Поддерживаются различные протоколы и стратегии отправки, включая отложенную передачу при отсутствии сети.
Компоненты отправки:
crashpad::HTTPTransport— абстракция для HTTP-запросов, используемая для отправки отчётов;- поддержка протоколов upload символов (symupload) и отчётов (report upload);
- настраиваемые политики повторных попыток и тайм-аутов;
- возможность пакетной отправки нескольких отчётов;
- интеграция с системами аутентификации и прокси.
Интеграция с системами символов
Для корректного анализа дампов памяти Crashpad поддерживает работу с файлами символов (debug symbols), которые позволяют сопоставлять адреса памяти с именами функций и исходным кодом.
Работа с символами:
- генерация файлов символов (.sym) из бинарных файлов;
- загрузка символов на сервер для последующего анализа;
- поддержка различных форматов символов (Breakpad, DWARF, PDB);
- инструменты для автоматического управления символами в пайплайне сборки.
Мониторинг и управление
Crashpad предоставляет API для мониторинга состояния системы отчетности и управления её поведением во время выполнения приложения.
Функции мониторинга и управления:
crashpad::Settings— настройки поведения библиотеки (автоматическая отправка, размер хранилища и др.);- сбор статистики по сбоям и успешным отправкам;
- callback-и для уведомления приложения о событиях (например, об успешной отправке отчёта);
- возможность принудительной генерации дампа для диагностических целей.
Инструменты разработки и утилиты
В состав Crashpad входят вспомогательные инструменты для разработки, тестирования и отладки системы отчетности об авариях.
Вспомогательные инструменты:
crashpad_handler— отдельный процесс-обработчик сбоев (рекомендуемый способ использования);crashpad_database_util— утилита для просмотра и управления локальной базой отчётов;crashpad_http_upload— инструмент для тестирования отправки отчётов;- интеграция с отладчиками (GDB, LLDB) для автоматического анализа дампов.