Открыть сервисСервис

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 — пар ключ-значение, которые будут прикреплены к каждому дампу (версия приложения, идентификатор пользователя, сборка и т. д.).

Пример кода на C++:

``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 применяется для сбора телеметрии о стабильности продукта и приоритизации исправлений на основе реальной частоты крашей.

Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru