Google Breakpad 在 windows下捕获程序崩溃报告
一、简述
Google breakpad是一个非常实用的跨平台的崩溃转储和分析模块,支持Linux、mac、solaris、windows。
通俗一点来讲,我们可以借助Google breakpad来捕捉程序程序崩溃的错误报告。即在程序崩溃时会生成dump文件。而dump文件是进程的内存镜像,能够保存程序中断时的进程状态,让我们在程序崩溃后能够了解具体原因。
关于如何使用Google breakpad 网上完整的资料并不是很多,这两天我在网上查询了一些资料,在这里对如何使用Google breakpad 进行一个完整的总结。
二、如何使用Google Breakpad
(一)、获取 Google Breakpad 源码
a、使用SVNcheckout代码
svn checkout http://google-breakpad.googlecode.com/svn/trunk/ google-breakpad-read-only
这个方法需要翻墙,暂且没有试过,有兴趣的小伙伴可以试试。
b、在CSDN资源中进行下载
我用的就是在CSDN上下载的源码,都需要积分,这里如果有兴趣的小伙伴可以从这里下载,不需要下载积分。
Google Breakpad源码下载
(二)、安装Python
这里为什么要安装Python,下面会讲述到。
关于下载什么版本,我是在官网下载了2.7.13版本,不要下载 3.x 版本以及更高版本,最好使用2.x版本。网上很多资料也强调不要使用3.x版本。这里我做了测试,安装了官网最新3.6.0版本,发现在用gyp工具将.gyp工程转换VS工程时会出现以下错误。
注意安装完Python后,要将安装目录添加到系统环境变量的Path中。
(三)、安装gyp工具
GYP(Generate Your Projects)是由 Chromium 团队开发的跨平台自动化项目构建工具,Chromium 便是通过 GYP 进行项目构建管理。
而GYP在 源码的 \google_breakpad\src\tools \gyp 目录下。
打开cmd命令提示窗口,进入到 \google_breakpad\src\tools \gyp 目录,输入命令 setup.py install ,完成gyp的安装。
如果未安装Python,会出现以下错误。
正确安装:
(四)、将gyp工程转换成VS工程文件
因为用gyp打包breakpad时需要python支持,所以需要本地安装Python。由于breakpad使用python来生成Windows下的工程文件。
在执行完上一步后,不要关闭cmd窗口,继续在该目录下执行命令。
gyp.bat –no-circular-check “….\client\windows\breakpad_client.gyp”
执行完之后,我们看到\google_breakpad\src\client\windows 目录下多了这几个文件,说明成功生成VS工程文件。
(五)、运行自带测试程序
用VS打开 breakpad_client.sln 文件。
打开之后,我们对整个工程生成解决方案。在\google_breakpad\src\client\windows\Debug 目录下生成crash_generation_app.exe,这个程序就是该解决方案生成的。
双击运行。
选择Server菜单下的start选项,开启服务端。
再次点击该exe,再次启动一个程序为客户端。
客户端点击 Deref Zero选项 。
我们先看一下这个选项的操作代码,这段代码中,我们给定义了一个int型指针并赋值为0(NULL),然后给该指针指向控件赋值1,显然这是不可行的,会引起程序崩溃,而这正是我们想要的效果。
void DerefZeroCrash() {int* x = 0;*x = 1;
}
点击 Deref Zero选项 之后,我们发现客户端程序闪退。而服务端显示如下:
那我们是否捕获到dump文件了呢?
我们可以看下面这段代码,ExceptionHandler即为捕捉异常的对象。而”C:\dumps\”即为dump文件生成的目录,生成dump文件的前提是该目录存在。
我们刚刚未在C盘新建dumps目录所以并没有生成dump文件。现在新建dumps目录,然后让客户端程序闪退,之后我们看到生成了dump文件。
第二次让客户端崩溃闪退,服务端显示信息。
下面我们用VS打开 dump文件,开始定位程序在何处崩溃了。
点击使用 仅限本机 进行调试
这里我们很清楚地看到程序具体是在哪一行代码崩溃的。同时可以看到堆栈信息。
尾
这一篇中我们讲解了如何如何获取Google Breakpad源码、环境的配置,以及自带demo的测试过程,下一篇中将详细讲解如何将Google Breakpad 添加到我们自己的工程中来。
Qt 使用 Google Breakpad 捕获程序崩溃报告 生成dmp文件
代码实例下载
Google Breakpad 在 windows下捕获程序崩溃报告相关推荐
- windows下捕获dump
一般要捕获异常只需要两个函数:SetUnhandledExceptionFilter截获异常:MiniDumpWriteDump写dump文件.但是由于CRT函数可能会在内部调用SetUnhandle ...
- Windows下Qt程序打包
Windows下Qt程序打包 将windeployqt.exe 目录添加到系统环境变量 windeployqt.exe目录如下: 命令行打包 1.打开命令行 2.执行打包命令 windeployqt ...
- windows下应用程序加载DLL动态链接库路径
windows下应用程序加载动态链接库路径依次分别是: 举例D盘soft文件夹下存在了一个test.exe的执行文件,即d:\soft\test.exe,依赖test.dll动态链接库. ■程序的执行 ...
- 006 - Windows 下 C++ 程序以管理员运行(UAC)
Windows 下 C++ 程序以管理员运行(UAC) MSVC 编译器 qmake 在 pro 文件中添加一行指令即可, QMAKE_LFLAGS += /MANIFESTUAC:"lev ...
- cef异常处理_cefSharp在XP下使得程序崩溃记录
前言:这是一个奇葩的问题,到现在自己还没有搞明白问题出现在哪里,但是从问题总算是解决了,希望看到此文章的大牛,如果知道问题出在什么地方,可以告知一下. [一个在XP系统下面应用程序崩溃问题] 资源: ...
- iOS 中捕获程序崩溃日志
iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者,是大多数软件都选择的方法.下面就介绍如何在iOS中实现: 1. 在程序启动时加上一个异常捕获监听,用来处理程序崩溃时 ...
- Windows 7 应用程序崩溃恢复
从Vista 到Windows 7 这两款操作系统都带有应用程序恢复和重启(ARR)功能,利用这个特性可以在应用程序处于无响应甚至崩溃状态时,保存当前正在处理的数据,并将应用程序以及之前的数据恢复.本 ...
- Windows下Mex程序的调试
写一下在Windows下调试Matlab与C/C++混合编程程序的方法. 1 编写Mex源文件 2 使用-g选项编译Mex源文件 3 将Matlab进程绑定到VS编译器中 4 在VS中打开Mex源 ...
- linux下开启程序崩溃生成core文件开关之ulimit详解
运行服务器程序经常会出现崩溃,而我们不可能一天24小时都等着他出现.在实际运行中也不能总是使用gdb启动,毕竟gdb绑定运行会消耗很大一部分性能. 不过linux系统在程序崩溃时会生成一个coredu ...
最新文章
- Ubuntu安装QT后无法输入中文怎么办?
- 关于 Ruby Ruby on Rails 的一些书及论坛网站
- DFS分布式文件系统 不同用户访问不同服务器修改同一文件 解决方案
- oracle的quit命令,Oracle的启动和关闭
- CentOS5.5支持ntfs文件系统
- “63个国外优秀测试站点链接”和其他相关资料,排除了目前已失效的网站和资料链接。...
- Git之常见零碎问题的原因分析和解决方案
- 无人机飞控开发平台培训理论课程——MSP430最小系统
- mysql blob 比较_与MSSQL对比学习MYSQL的心得(四)--BLOB数据类型
- DNS服务器配置之前传------基础知识普及
- asp.net 安全---File Sytem 安全
- Objective-C浅拷贝和深拷贝
- QBASIC语言程序设计 谭浩强 pdf
- Qt 读写 txt 文件
- 提取pdf目录的方法
- pidgin qq_Pidgin入门:Skype的开源替代品
- wxpy登录 KeyError: 'pass_ticket'
- html零基础学习入门,nlp网站例:HTML零基础入门-HTML学习大纲.doc
- 2022年4月20日Python课堂考试复盘及课堂笔记之程序控制结构
- 训练日记2019.11.11 莫队求区间众数
热门文章
- SON_EXAM考试php,南开18秋学期(1703)《大学英语(二)》在线作业答案
- JavaScript 基础之 JavaScript 秘密花园
- SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“. SLF4J: Defaulting to no-operation (
- 公司内网外网同时使用
- FFT/NTT(板子整理)
- 在电脑上安装两个不同版本mysql(包括mysql解压版安装和配置,及mysql服务的问题解决)
- 变身Go运维架构师,看这一篇就够了!
- EsgynDB之TRIM函数
- linux环境 彻底卸载jenkins方法
- AJAX——瀑布流布局