多进程接入
Windows 多进程环境接入SDK
目前 Bugly Windows
为独立进程架构:业务进程拉起 crashpad_handler.exe
。等发生crash的时候再通知crashpad_handler.exe
生成dmp文件并上报。并且crashpad_handler.exe
支持多个客户进程通过named pipe
连接到他。主要的两个接口如下:
client_extension.dll 包含 | crashpad_handler.exe 包含 |
---|---|
shared section:PipeName | NamedPipe Handler |
注册ExceptionHander | Waiting CrashEvent |
CrashEvent | Gen Minidump |
none | upload minidump |
宿主进程调用InitBuglyManager:
- 生成随机的PipeName并存入SharedSection中(所有dll实例共用)
- 使用PipeName创建NamedPipe,保存PipeHandler
- 拉起
crashpad_handler.exe
,并将PipeHandler传给crashpad_handler.exe
,然后关闭自己这边的PipeHandler - 注册异常监控函数
- 监控到异常后,激活CrashEvent事件,通知
crashpad_handler.exe
读取宿主进程生成minidump并上传 - 调用InitBuglyManager的进程退出时,
crashpad_handler.exe
才会退出
宿主进程调用SetHandlerIPCPipe(pipe_name):
- 宿主进程CrashFile打开NamedPipe,并发送register消息
crashpad_handler.exe
收到register消息后,获取发送方的processId,并生成新的CrashEvent和processId关联,再将CrashEvent回传给对方- 宿主进程接收到CrashEvent后保存,并注册异常监控函数
- 监控到异常后,激活CrashEvent事件,通知
crashpad_handler.exe
读取宿主进程生成minidump并上传
总结:
如果业务是多进程架构,且只需要一个crashpad_handler.exe
,只需要在初始进程中调用一次InitBuglyManager
函数拉起crashpad_handler.exe
然后其他的进程调用SetHandlerIPCPipe
方法就行了。
如果需要每个进程都有自己的crashpad_handler.exe
,就每个进程都单独调用InitBuglyManager
,然后马上调用GetHandlerIPCPipeName
将自己的pipename保存起来,后续使用SetKey(pipeName, key, value)
来设置自己的crashpad_handler.exe
。