# breakpad

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

## Особенности

- кроссплатформенность (поддержка Windows, macOS, Linux, Android);
- сбор минимизированных дампов при критических сбоях программы;
- интеграция с системами отчетов об ошибках;
- поддержка символических файлов для анализа дампов.

## Основные компоненты

Библиотека состоит из нескольких модулей, каждый из которых отвечает за определенную часть процесса сбора и обработки дампов (подробнее с документацией можно ознакомиться [здесь](https://chromium.googlesource.com/breakpad/breakpad/)):

### Клиентская часть (сбор дампов)

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

- `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` — утилита для загрузки символов на сервер с отчетностями.
