1. 工程目标
这是一个最小化的 Windows Crashpad Demo,用于验证以下完整链路:
- 应用程序启动独立的
crashpad_handler.exe。 - 应用向 handler 注册自身。
- 应用故意触发整数除零异常。
- handler 在独立进程中读取崩溃进程并生成 Minidump。
- 使用匹配的 PDB 在 WinDbg 中还原函数名和源码行。
本工程只在本地保存 Dump,不配置上传服务器,也不包含崩溃上报后台。
- 使用匹配的 PDB 在 WinDbg 中还原函数名和源码行。
2. Crashpad 架构
Crashpad 采用客户端加独立 handler 的双进程架构:
MinimalCrashpad.exe | | StartHandler + Named Pipe 注册 v crashpad_handler.exe | | 目标进程发生未处理异常 | 跨进程读取线程、寄存器和内存 v crashpad_db\reports\<uuid>.dmp与直接在崩溃进程内调用MiniDumpWriteDump相比,Crashpad 将主要的 Dump
写入工作放到独立进程中。即使客户端进程的堆、锁或运行时状态已经损坏,
handler 仍有机会完成采集。
3. 工程文件
Minimal_Crashpad\ |-- main.cpp # Crashpad 初始化和除零崩溃触发 |-- CMakeLists.txt # 目标、依赖、PDB 和 handler 复制规则 |-- conanfile.txt # Crashpad Conan 依赖 |-- build.ps1 # 一键安装依赖、生成解决方案并构建 `-- README.md # 本文档构建产物不放在源码目录,而是统一写入:
02_Debugging_and_Crash\b-crashpad\vs\Release\ |-- MinimalCrashpad.exe |-- MinimalCrashpad.pdb |-- crashpad_handler.exe `-- crashpad_db\ |-- metadata |-- settings.dat `-- reports\ `-- <uuid>.dmpcrashpad_handler.exe来自 Conan 预编译包,所以不会出现在源码工程中。
CMake 在构建完成后将它复制到MinimalCrashpad.exe旁边。
4. 构建环境
- Windows x64
- Visual Studio 2022
- MSVC 19.4x
- CMake 3.20+
- Conan 2
安装 Conan:
- Conan 2
py-m pip install--user conanconanfile.txt使用:
crashpad/cci.20220219