编译brealpad是一个非常麻烦的事情,亲测编译成功后在项目中引用也是各种版本不匹配,所以采用vcpkg直接安装。
1、vcpkg
需要先在本机环境中安装vcpkg。
在Windows下开发C++程序时,常用依赖包的管理是一个头疼的问题。Vcpkg是一个命令行包管理工具,它可以极大地简化三方库的获取、安装、使用和部署流程。详情查看链接:https://zhuanlan.zhihu.com/p/87391067
2、vcpkg安装breakpad
先cd到vcpkg的安装目录,然后执行下条指令,:x64-windows表示安装win64版本。
./vcpkg install breakpad:x64-windows
因为众所周知的原因,下载可能会很慢。不过有大佬给了国内镜像。详情查看链接链接:
https://blog.csdn.net/jackboos/article/details/105026109
3、项目中使用breakpad
查看vcpkg文档后,看介绍说可以在执行一些命令后直接引用vcpkg安装的库。一番折腾后没有成功。所以采用直接引用依赖库的方式。
1、如果执行了上文中的安装breakpad命令,应该可以在如下图中的位置找到安装好的库文件。
vcpkg/packages/breakpad_x64-windows
2、将breakpad_x64-windows拷贝到项目的同级目录中。打开项目属性页,在c/c++选项中的附加包含目录中添加
breakpad_x64-windows\include
链接器选项中的附加库目录添加(release模式)
breakpad_x64-windows\lib;
附加依赖项中添加上个文件夹里两个库的名字
libbreakpad_clientd.lib;libbreakpadd.lib;
即可配置完成。 3、在main文件中添加如下代码测试(在编译时会报错某某文件找不到,只要在引用前面加上breakpad_x64-windows/include/即可。如果不想自己一个个添加也可用我下面提供的)
#include "breakpad_x64-windows/include/client/windows/handler/exception_handler.h"
void crash() {
volatile int* a = (int*)(NULL);
*a = 1;
}
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;
}
int main(int argc, char* argv[]) {
QApplication a(argc, argv);
QString appDirPath = QCoreApplication::applicationDirPath() + "/crash";
QDir dir;
if (!dir.exists(appDirPath)) {
bool res = dir.mkpath(appDirPath);
qDebug() << "New mkdir " << appDirPath << " " << res;
}
google_breakpad::ExceptionHandler eh(
L".", NULL, callback, NULL,
google_breakpad::ExceptionHandler::HANDLER_ALL);
crash();
return a.exec();
}
4、vs中realease模式下,如果想直接定位到代码中需要修改一些配置选项。 分别是c/c++中的调试信息格式配置 和优化配置 。链接器的调试选项中选择生成调试信息 。以下选项内容并不绝对,自己测试修改。 5、资源 https://download.csdn.net/download/qq_45988470/64499365
|