breakpad
Библиотека, предназначенная для сбора и обработки аварийных дампов памяти при критических сбоях в программном обеспечении. Библиотека обеспечивает перехват исключений и сигналов, приводящих к крашу, с последующим созданием минимизированного дампа, содержащего состояние регистров процессора, стек вызовов, информацию о загруженных модулях и другую диагностическую информацию.
Особенности
- кроссплатформенность (поддержка Windows, macOS, Linux, Android);
- сбор минимизированных дампов при критических сбоях программы;
- интеграция с системами отчетов об ошибках;
- поддержка символических файлов для анализа дампов.
Основные компоненты
Библиотека состоит из нескольких модулей, каждый из которых отвечает за определенную часть процесса сбора и обработки дампов (подробнее с документацией можно ознакомиться здесь):
Клиентская часть (сбор дампов)
Модуль, который интегрируется в приложение и перехватывает сигналы и исключения, приводящие к крашу. В момент сбоя создается минидамп, содержащий информацию о состоянии программы: регистры процессора, стек вызовов, загруженные модули и т.д.
google_breakpad::ExceptionHandler— основной класс для обработки исключений и создания дампов;google_breakpad::MinidumpDescriptor— класс для описания параметров создания минидампа;ExceptionHandler::WriteMinidump()— метод для принудительного создания дампа без исключения;ExceptionHandler::RegisterCallback()— регистрация callback-функций для обработки дампов.
Серверная часть (обработка дампов)
Инструменты для обработки собранных дампов на стороне разработчика:
minidump_stackwalk— утилита для символизации и анализа стека вызовов из минидампа;minidump_dump— инструмент для просмотра содержимого минидампа в читаемом формате;dump_syms— утилита для извлечения символов из исполняемых файлов;symupload— инструмент для загрузки символов на сервер.
Генерация символов
Для корректной символизации дампов необходимо предварительно генерировать символьные файлы (символы) для каждой сборки приложения. Breakpad предоставляет утилиты для извлечения символов из бинарных файлов и создания символов в собственном формате.
google_breakpad::Module— класс для представления модуля с символами;google_breakpad::SymbolSupplier— интерфейс для поставщиков символов;dump_syms— основная утилита для создания файлов символов в формате Breakpad;ms_symbol_server_converter— инструмент для работы с символами Microsoft Symbol Server.
Интеграция с системами отчетов
Breakpad может быть интегрирован с системами сбора отчетов об ошибках, такими как Google Crashpad или собственными серверами разработчиков, для автоматической отправки и анализа дампов.
google_breakpad::HTTPUpload— класс для загрузки дампов на HTTP-сервер;google_breakpad::CrashReportSender— класс для отправки отчетов об ошибках;sym_upload— утилита для загрузки символов на сервер с отчетностями.