Crashpad handler — компонент сбора дампов памяти¶
Crashpad handler — это компонент системы сбора дампов памяти (crash dump), разработанный в рамках проекта Google Crashpad и используемый в различных кроссплатформенных приложениях для диагностики аварийных завершений процессов. Он работает как отдельный служебный процесс, который переживает сбой основного приложения, захватывает его состояние в момент падения и передаёт дамп в сервис анализа (например, Sentry, Backtrace или внутренний crash-reporting сервер).
¶История и происхождение
Проект Crashpad был создан компанией Google как часть инфраструктуры сбора крашей для браузера Chromium и его производных продуктов. Код был открыт под лицензией Apache 2.0 и выделен в самостоятельную библиотеку, которую могут использовать сторонние разработчики. Crashpad пришёл на смену внутренним механизмам сбора крашей, существовавшим в Chromium, и заменил собой более ранние подходы, в частности кроссплатформенную библиотеку Breakpad (также разработанную Google). Breakpad продолжает использоваться в ряде проектов, но Crashpad считается его преемником с улучшенной поддержкой современных операционных систем.
Сегодня Crashpad входит в состав Chromium, Electron, Firefox (частично), а также ряда коммерческих и открытых проектов, использующих библиотеку libcurl, Qt и другие кроссплатформенные фреймворки. В частности, клиент Sentry по умолчанию использует Crashpad как backend для сбора дампов в настольных приложениях.
¶Принцип работы
Архитектура Crashpad построена вокруг разделения на две части: клиентскую библиотеку, встраиваемую в основное приложение, и отдельный исполняемый файл crashpad_handler. При инициализации приложение запускает crashpad_handler как дочерний процесс и передаёт ему файловый дескриптор или сокет для обмена сообщениями. Handler регистрирует обработчики исключений и сигналов в операционной системе (SEH на Windows, сигналы SIGSEGV/SIGABRT и mach-исключения на macOS, сигналы на Linux), которые срабатывают в контексте аварийно завершающегося процесса.
Когда основное приложение падает, handler перехватывает управление, получает доступ к его адресному пространству и записывает минидамп — компактный бинарный файл, содержащий стек вызовов, содержимое регистров, список загруженных модулей, а также (опционально) полное содержимое памяти процесса. Затем дамп сжимается и отправляется на указанный crash-reporting сервер по HTTP(S) или сохраняется локально.
Ключевое преимущество такого разделения — независимость. Поскольку handler выполняется в отдельном процессе, он не затрагивается при повреждении памяти основного приложения и способен корректно завершить сбор дампа даже в условиях критических сбоев.
¶Кроссплатформенная поддержка
Crashpad поддерживает три основные платформы:
- Windows — использует механизм минидампов Win32 API (
MiniDumpWriteDump), интегрируется с Windows Error Reporting (WER). - macOS — опирается на Mach-exception порты и краш-репорты, совместим с системным CrashReporter.
- Linux — реализует сбор дампов через сигналы и ptrace, формирует дампы в формате, совместимом с Breakpad/Minidump.
Единый формат минидампов (Minidump) позволяет анализировать дампы, собранные на любой из поддерживаемых платформ, с помощью общих инструментов — например, minidump_stackwalk или Sentry.
¶Настройка и использование
В typical-сценарии интеграция Crashpad выглядит следующим образом: разработчик инициализирует CrashpadClient, указывая путь к crashpad_handler, каталог для временных дампов и URL сервера приёма. Дополнительно можно задать список annotations — пар ключ-значение, которые будут прикреплены к каждому дампу (версия приложения, идентификатор пользователя, сборка и т. д.).
``cpp crashpad::CrashpadClient client; client.StartHandler(handler_path, database_path, url, annotations, arguments, true, false); ``
После вызова StartHandler все необработанные исключения и сигналы автоматически направляются в handler.
¶Альтернативы
Основными альтернативами Crashpad являются:
| Решение | Особенности |
|---|---|
| Breakpad | Предшественник Crashpad, поддерживает Linux, macOS, Windows, но считается устаревшим |
| Google Breakpad (форк Mozilla) | Используется в Firefox, отличается собственной реализацией сбора дампов |
| Windows Error Reporting | Встроенная система Windows, не кроссплатформенная |
| Core dumps (Linux) | Стандартный механизм ядра, не требует внешних библиотек, но менее удобен для автоматической отправки |
| Apple Crash Reporter | Встроенная система macOS |
¶Применение
Crashpad активно используется в десктопных приложениях, где важна диагностика редких и трудно воспроизводимых сбоев. Среди известных пользователей — браузеры на базе Chromium (Chrome, Opera, Яндекс.Браузер), мессенджеры на Electron, а также нативные приложения, интегрирующие Sentry SDK. В корпоративной разработке Crashpad применяется для сбора телеметрии о стабильности продукта и приоритизации исправлений на основе реальной частоты крашей.
