1.初始化breakpad之前必须创建好dump文件目录,不然breakpad服务器不能正常的写dump,这回导致breakpad客户端在奔溃时无线等待服务dump写完的消息,最后失去响应。
2.常用到的四个类。
1)common:基础功能,包含一个对GUID的封装和http上传的类。
2)exception_handler:用来捕获奔溃的类。
3)crash_generation_server:breakpad的服务端,用来在产生奔溃时抓取dump;
4)crash_generation_client:breakpad的客户端,用来捕获当前进程的奔溃。
3.dump可以在进程内核进程外使用
1)当在进程外使用时,只需要使用ExceptionHandler。ExceptionHandler会挂上异常处理、CRT参数错误处理、purecall错误处理,当发生crash时,breakpad会写好dump,然后回调通知使用者。
2)进程外写dump,使用者一样要定义一个ExceptionHandler对象,这对象有管道名称。另外还需要写一个server进程,server进程负责:写dump、上传dump,当客户进程发生crash时,只需要通过Event置位通知服务进程。server进程只需要定义一个breakpad提供的CrashGenerationServer类对象。客户进程和服务进程是通过管道通信的,通信可以只发生在客户进程初始化阶段,server进程要先于客户进程启动,否则客户进程就会因为管道连接不上而使用进程内dump捕获。
(一)Windows 系统异常处理顺序
1.内核异常处理
2.调试器异常处理
3.进程VEH
3.线程SEH
4.进程SetUnhandledExceptionFilter()注册的函数
5.系统默认的异常处理函数 UnhandledExcetionFilter(). UnhandledExceptionFilter()根据 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug子键中的项来处理.