breakpad编译指南(Windows)

在编译breakpad时候,遇到各种各样的问题,做些记录,以便后续参考

Windows下已有SetUnhandledExceptionFilter可以抓取dmp,为什么还要研究breakpad?因为breakpad是跨平台的,相关资料参考如下:

02-跨平台的Qt程序崩溃之前生成Dump文件Breakpad_qbreakpad和google breakpad的区别_robert_cysy的博客-CSDN博客

Windows下编译

安装python,我本地安装的python2.7(其他版本可能会有报错),参考安装方法:

Python2.7 安装教程_枫之星雨的博客-CSDN博客

(注:安装参考文档中设置环境变量只添加的C:\Python27,尽量把C:\Python27\Scripts也加入到环境变量中)

breakpad源码下载 

git clone https://chromium.googlesource.com/breakpad/breakpad

获取gyp(chromium开发的跨平台自动化项目构建工具)

git clone https://chromium.googlesource.com/external/gyp

安装gyp

cd gyp
python setup.py install

然后gyp -h 验证是否安装成功

可能会报错

 这个是缺少six模块,可执行

pip install six

然后再次执行gyp -h 验证是否安装成功,如下截图说明成功了

然后可以使用 gyp生成sln

1、需要注意的是,克隆的breakpad源码需要切换到master分支,不然是没有breakpad_client.gyp文件的

2、执行命令

./gyp.bat --no-circular-check "../breakpad/src/client/windows/breakpad_client.gyp"

注意:网上几乎所有博客该命令开头都没有./   我这里报错“gyp.bat : 无法将“gyp.bat”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。”如下图

 正确执行如下图:

最后查看breakpad\src\client\windows路径下有sln文件生成了

 

 vs打开编译即可(vs版本过高的话,需要按照提示升级项目)

 红框中的三个项目由于生成sln时候报错,缺少文件,所以这三个编译会失败,但不影响整体,可以忽略

接下来就可以使用生成的文件了

新建一个项目test_breakpad

#include <iostream>
#include <cstdio> 
#include "client/windows/handler/exception_handler.h"  

namespace {

    static bool callback(const wchar_t* dump_path, const wchar_t* id,
        void* context, EXCEPTION_POINTERS* exinfo,
        MDRawAssertionInfo* assertion,
        bool succeeded) {
        if (succeeded) {
            printf("dump guid is %ws\n", id);
        }
        else {
            printf("dump failed\n");
        }
        fflush(stdout);

        return succeeded;
    }

    static void CrashFunction() {
        int* i = reinterpret_cast<int*>(0x45);
        *i = 5;  // crash!  
    }

}  // namespace  


int main()
{
    google_breakpad::ExceptionHandler eh(
        L".", NULL, callback, NULL,
        google_breakpad::ExceptionHandler::HANDLER_ALL);
    CrashFunction();
    printf("did not crash?\n");
    return 0;
}

将头文件拷贝到测试项目下面

然后拷贝配置lib(配置方法可在网上参考)

common.lib 
exception_handler.lib 
crash_generation_server.lib 
crash_generation_client.lib

如果报错

需要将如下图和breakpad中的设置一样

 

运行测试程序,生成dmp

dmp拖入vs中点击调试

准确定位崩溃位置

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值