Google Breakpad 完全解析(二) —— Windows前台实现篇
2015-04-18 16:36
609 查看
TableofcontentsforGoogleBreakpad完全解析
GoogleBreakpad完全解析(二)——Windows前台实现篇
原创文章,转载请标明出处:SoulApogee(
好,看完了
代码结构
在我们来看breakpad是如何实现其强大的功能之前,我们先来看一下他的代码结构吧。Googlebreakpad的源代码都在src的目录下,他分为如下几个文件夹:
client:这下面包含了前台应用程序中捕捉dump的部分代码,里面按照平台分成各个子文件夹
common:前台后台都会用到的部分基础代码,字符串转换,内存读写,md5神马的
google_breakpad:breakpad中公共的头文件
processor:用于在后台处理崩溃的核心代码
testing:测试工程
third_party:第三方库
tools:一些小工具,用于处理dump文件和符号表
我们先来看Windows下前台实现的部分,也就是client文件夹下的代码。
breakpad的崩溃捕获机制
在Windows下捕获崩溃,大家很容易会想到那个捕获结构化异常的Api:breakpad中也使用了这个Api来实现的崩溃捕获,另外,breakpad还捕获了另外两种C++运行库提供的崩溃,一种是使用
?
2 4 6 8 10 | (handler_types&HANDLER_EXCEPTION) #if_MSC_VER>=1400//MSVC2005/8 (handler_types&HANDLER_INVALID_PARAMETER) [code](handler_types&HANDLER_PURECALL) | explicitconst 3 5 7 9 11 13 15 17 19 21 23 const
[code] [code] "r" ReadCheckpoint(fd); (fd); ReportResultCrashReportSender::SendCrashReport( [code]wstring&url, map<wstring,wstring>¶meters, wstring&dump_file_name,wstring*report_code){ today=GetCurrentDate(); (today==last_sent_date_&&
[code]RESULT_THROTTLED; <codeplain"="">} |
需要注意的是:在上传dump文件的时候,crash_report_sender并不会对dump文件进行分析,而是直接上传整个dump文件,如果你需要上传的dump文件非常大的话,可以考虑把崩溃分析处理的逻辑放入前台,通过去重或者直接上传分析结果,减少上传的文件大小。
breakpad存在的问题
进程外生成dump有很多好处,其中最大的好处就是不会被崩溃进程影响,这样dump的过程就不容易出错,但是这样也有一定的弊端。
1.部分崩溃无法抓取在一些极端的崩溃,如堆栈溢出之类的崩溃,进程外抓取dump有时候会失败。
2.无法抓取死锁或者其他原因导致的进程僵死
breakpad现在没有检测进程死锁的代码,也没有在服务端控制客户端请求dump的代码,所以现在breakpad无法抓取死锁等进程僵死的问题。不过因为breakpad的定位是处理崩溃,如果有这种需要的童鞋,可以自行修改breakpad的代码,添加这些功能。
3.对服务端有依赖
如果指定了在使用进程外抓取dump,breakpad对服务端就有依赖。主要体现在抓取dump时,如果服务端不存在,客户端将无法正常抓取dump,甚至有时会出现阻塞。
当然对于这些问题,随着breakpad的发展肯定会越来越完善。如果,你遇到了了这些问题,而又绕过不了,那就改代码,并且提交给breakpad吧,开源项目就是这么发展的。
好,到此breakpad的Windows实现就已经说完了,如果有神马问题,还请多多指教。谢谢大家。
转帖:http://www.cppblog.com/lauer3912/archive/2011/11/07/159785.html
相关文章推荐
- Google Breakpad 完全解析(二) —— Windows前台实现篇
- Google Breakpad 完全解析(二) —— Windows前台实现篇
- Google Breakpad 完全解析(一) —— Windows入门篇
- Google Breakpad 完全解析(一) —— Windows入门篇
- Google Breakpad 完全解析(一) —— Windows入门篇
- Google Breakpad 完全解析(一) —— Windows入门篇
- Google Breakpad 完全解析(一) —— Windows入门篇
- Google Breakpad 完全解析(一) —— Windows入门篇
- Google Breakpad 完全解析(一)
- Android 3D滑动菜单完全解析,实现推拉门式的立体特效
- Android 3D滑动菜单完全解析,实现推拉门式的立体特效
- Android 对Layout_weight属性完全解析以及使用ListView来实现表格
- Boost Asio在Windows下设计及实现解析
- Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能 (转)
- Android 对Layout_weight属性完全解析以及使用ListView来实现表格(自定义适配器)
- Android开发之Tween(补间动画)完全解析(下)——代码实现
- Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能
- Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能
- Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能
- 【转】Python实现修改Windows CMD命令行输出颜色(完全解析)