看到这个跨平台的开源项目后希望在自己的项目中使用,在网上转了一圈后发现很多文章都不太正确(或失效),特自己记录下整个过程。

最新的google_breakpad中已经不包含gyp的源码,因此需要单独下载gpy源码并安装。而gpy依赖于python 2.x,我使用了最新的python 2.7.14。

安装python 2.7.14

整个最简单,不表。windows默认安装到了c:\Python27下,此时要将如下目录加入windows path变量:

c:\Python27
c:\Python27\Scripts

安装gyp

在github上下载一份gyp源码,我从这里下载 https://github.com/adblockplus/gyp

执行以下代码安装:

setup.py install

编译google_breakpad windows Client

从github上下载google_breakpad。

在breakpad-master\src\client\windows目录下打开cmd窗口,执行如下命令:

 gyp --no-circular-check "./breakpad_client.gyp"
#不加--no-circular-check的话,gyp会发现此处的项目有循环依赖问题

上述命令执行成功后,会在当前目录生成visualstudio项目文件,安装正常的vs项目完成编译工作即可(我在这里出现了test项目编译错误的情况,但breakpad是可用的)。

特别注意:google_breakpad各子项目的code-generation编译选项默认为MTd/MT,需要修改为MDd/MD(因为后续QT使用VC做编译器时默认使用了MDd/MD选项)。

编译完成之后,运行crash_generation_app吧,这是他的测试程序,dump的默认位置保存在C:\Dumps下,请注意先建立好目录,不然会无法使用。
启动测试程序之后,此时还不能抓取dump,因为这个是breakpad中的服务器端,需要再启动一个测试程序,在第二个测试程序中,我们就可以试验Client菜单中的各种崩溃了。这些崩溃都会被抓住转存到C:Dumps目录下。

QT使用google_breakpad

QT使用google_breakpad windows client时,分为两步:

修改QT的pro文件:

#在加入对google_breakpad的库引用
LIBS += -L$$PWD/../_lib/google_breakpad -lexception_handler
LIBS += -L$$PWD/../_lib/google_breakpad -lcrash_generation_client
LIBS += -L$$PWD/../_lib/google_breakpad -lcommon
#加入common会容易被人忽略,编译时的报错会提醒你这一点,一定要仔细看出错信息#加入google_breakpad的包含文件
INCLUDEPATH += $$PWD/../_lib/google_breakpad/include

参照google给的crash_generation_app范例,在main.cpp中写入如下代码:

#include "client/windows/handler/exception_handler.h"// 程序崩溃回调函数;bool callback(const wchar_t *dump_path, const wchar_t *id,void *context, EXCEPTION_POINTERS *exinfo,MDRawAssertionInfo *assertion,bool succeeded)
{if (succeeded){qDebug() << "Create dump file success";}else{qDebug() << "Create dump file failed";}return succeeded;
}static size_t kCustomInfoCount = 2;
static google_breakpad::CustomInfoEntry kCustomInfoEntries[] = {google_breakpad::CustomInfoEntry(L"prod", L"CrashTestApp"),google_breakpad::CustomInfoEntry(L"ver", L"1.0"),
};int main(int argc, char *argv[])
{//创建dump目录std::wstring dumpDir = L"./dumps";//L"C:\\dumps\\",// 创建捕捉程序异常对象;google_breakpad::CustomClientInfo custom_info = {kCustomInfoEntries, kCustomInfoCount};const wchar_t kPipeName[] = L"";// L"\\\\.\\pipe\\BreakpadCrashServices\\TestServer";google_breakpad::ExceptionHandler handler(dumpDir,NULL,callback,//google_breakpad::ShowDumpResults,NULL,google_breakpad::ExceptionHandler::HANDLER_ALL,MiniDumpNormal,kPipeName,NULL);//&custom_info);QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

使用注意事项

使用breakpad的时候,有两个地方需要注意:
1. 记得把breakpad的solution下的几个工程,包含到你开发的工程中,或者直接包含他们的lib。
common:基础功能,包含一个对GUID的封装和http上传的类。
exception_handler:用来捕获崩溃的类。
crash_generation_server:breakpad的服务端,用来在产生崩溃时抓取dump。
crash_generation_client:breakpad的客户端,用来捕获当前进程的崩溃。
2. 在初始化breakpad之前,记得先创建好dump文件的目录,不然breakpad服务端将不能正常的写dump,这会导致breakpad客户端在崩溃时无限等待服务端dump写完的消息,最后失去响应。

windows10下使用gyp编译google_breakpad相关推荐

  1. Windows10下源码编译MXNet C++ api with OpenBlas

    为什么要编译等这种介绍性的文字就不多说了.直入主题:Windows下源码编译mxnet MXNet的依赖相对而言是比较少的了,但编译起来也不简单. 你可以按照官方的文档来编译,按道理来讲,结果都是一样 ...

  2. 2019编译ffepeg vs_如何在windows10下使用vs2017编译最新版本的FFmpeg和ffplay

    该文章描述了如何在windows10 64位系统下面编译出FFmpeg的库及其自带的ffplay播放器,而且全部采用最新的版本,这样我们可以在vs2017的ide下调试ffplay,能使我们更容易学习 ...

  3. windows10 下 vscode + cmake 编译 Qt6 代码

    一.使用 cmake 建立工程 二.安装 vscode 插件 使用 vscode 打开当前工程,如下图所示: 安装如下插件:CMake.CMake Tools 和 Qt tools . 三.构建 + ...

  4. windows10下使用minGW64 编译krita源码报错

    系列文章目录 文章目录 系列文章目录 前言 一.错误原因 二.使用步骤 1.引入库 前言 collect2.exe: error: ld returned 1 exit status mingw32- ...

  5. ffmpeg for android windows,windows10下编译ffmpeg for android

    最近实现了一款基于FFMpeg的支持多路视频的实时流媒体播放器:https://github.com/huweijian5/RtspPlayer 有兴趣能够关注下.html 本文记录在windows1 ...

  6. 我在windows10下,使用CMake gui 编译krita源码

    系列文章目录 文章目录 系列文章目录 前言 一.krita编译说明 二.使用步骤 前言 我在windows10下,使用CMake gui 编译krita源码 where is the source c ...

  7. 我在windows10下,使用CMake gui 编译krita源码,CMake gui报错:LibMyPaint_DIR-NOTFOUND

    系列文章目录 文章目录 系列文章目录 前言 一.原因 二.解决 1.引入库 前言 我在windows10下,使用CMake gui 编译krita源码 where is the source code ...

  8. Windows10下编译DOTA_devkit

    背景:在linux系统下没有配好DOTA_devkit,失败无奈转向windows10 解决:import _polyiou ModuleNotFoundError: No module named ...

  9. Windows10+VS2017下安装和 编译openssl库

    windows10+VS2017下安装和编译openssl库 环境 windows10,64位 openssl解压目录:E:\mylib\openssl-1.0.2l openssl安装目录:E:\m ...

最新文章

  1. “我只需一个周末就可以构建出这个应用!”
  2. client软件怎么卸载 nac_如何彻底卸载在 Mac 上安装的一个软件?
  3. 法拉利虚拟学院2010 服务器,法拉利虚拟学院2010
  4. 从 12306 订购火车票 无需FQ
  5. flush无效,IIS7下php怎么实时输出?
  6. javascript浮点数学习总结之0.1+0.2
  7. 刚毕业想学习web前端,该怎么学才能最快入门?
  8. 并发执行linux命令结果混乱,Shell脚本--并发执行
  9. 阿里云、天津开启多项合作,区域经济大脑落地津南
  10. javascript解析dom
  11. PS换照片底色(三种方式)
  12. 计算机ps屏幕背景颜色怎么换,win7系统ps背景颜色怎么换?七步教您轻松处理
  13. c51单片机流水灯程序汇编语言,基于51单片机的流水灯程序
  14. 【其他】笔记本的辐射有多大?
  15. 僵尸网络研究报告(2016)
  16. 零基础能学大数据吗 需要知道什么核心知识
  17. [渝粤教育] 天水师范学院 陶质文物保护修复 参考 资料
  18. 用夜神安卓模拟器做Android开发
  19. 重组标签云-标签聚类及其评价研究
  20. 湖北刷脸支付:中国银联联合商业银行推出“刷脸付”产品

热门文章

  1. 基于单片机的交通灯设计c语言程序,基于单片机AT89C51控制的十字路口交通灯系统设计...
  2. matlab 画实心圆柱体,怎样用matlab画水平实心圆柱体,已知圆柱体的半径和高度。(悬赏值不够了,见谅)...
  3. Linux路由转发+多网卡配置(route命令)
  4. 深入浅出matplotlib(64): 绘制矢量流线图
  5. Paraview—定义专属流线
  6. Qt ------ 获取 wifi 信息
  7. mysql 测试环境过一段时间就连接不上
  8. 博士申请 | 香港中文大学(深圳)宋方达老师组招收贝叶斯统计方向博士生
  9. 聚焦降本增效,用户满意度成达内教育增长“晴雨表”
  10. 当下企业信息化的痛点以及相关解决方案