win和linux下Breakpad编译使用
1、下载安装python2.7.13
https://www.python.org/ftp/python/2.7.13/python-2.7.13.amd64.msi
python27-x64和C:\python27-x64\Scripts添加到Path环境变量中。
python -v 验证
2、下载gyp
https://gitee.com/merlindu/chromium.googlesource.com-external-gyp
cd gyp
python setup.py install
3、下载breakpad
https://gitee.com/mirrors/Breakpad1
拷贝gyp文件夹到breakpad\src\tools文件夹下
cd gyp
gyp.bat --no-circular-check "../../client/windows/breakpad_client.gyp"

4、使用vs2017生成工程文件

生成库文件lib
注意:编译库的工程:项目=》属性=》c++》生成代码=》多线程调试 (/MTd) 和 项目的属性,尽量一致。
设置好库头文件、库文件路径和依赖(common.lib与其他库冲突, 改名crash_command.lib)


// breakpad.h
#pragma once
#ifdef WIN32
#include "client/windows/handler/exception_handler.h"
bool dumpCallback(const wchar_t *dump_path, const wchar_t *id, void *context,
EXCEPTION_POINTERS *exinfo,
MDRawAssertionInfo *assertion,
bool succeeded)
{
#ifndef CONSOLEAPP
FatalAppExit(-1, ("程序异常,生成DMP文件"));
#else
std::cout << "程序异常,生成DMP文件\ n";
#endif // _WIN32
return succeeded;
}
void breakpadDump()
{
google_breakpad::ExceptionHandler * eh = new google_breakpad::ExceptionHandler(
L"./", NULL, dumpCallback, NULL,
google_breakpad::ExceptionHandler::HANDLER_ALL);
}
#else
#include "client/linux/handler/exception_handler.h"
static bool dumpCallback(const google_breakpad::MinidumpDescriptor &descriptor,
void *context,
bool succeeded)
{
std::string strPath = std::string("./");
remove(strPath.c_str());
rename(descriptor.path(), strPath.c_str());
printf("程序异常,生成DMP文件\n");
return succeeded;
}
void breakpadDump()
{
google_breakpad::MinidumpDescriptor descriptor("./");
google_breakpad::ExceptionHandler *eh = new google_breakpad::ExceptionHandler(descriptor,
NULL,
dumpCallback,
NULL,
true,
-1);
}
#endif // !WIN32
#include "breakpad.h"
//运行异常处理
void RunCrashHandler()
{
breakpadDump();
}
int main()
{
RunCrashHandler();
int* pTest = NULL;
*pTest = 1;
}
vs2017分析dmp文件
调试:使用vs2017,打开dmp文件,设置符号路径,进行调试。
linux下分析dmp文件
Breakpad为我们提供了两个工具dump_syms和minidump_stackwalk,我们将用他们来分析dump,定位bug。
1、dump_syms,将程序导出符号文件;
dump_syms libxxx.so.1.0.0 >libxxx.so.1.0.0.sym
2、获取头信息并创建相关文件夹
获取头信息:head –n 1 libxxx.so.1.0.0.sym
创建文件夹并将放置.sym文件 libxxx.so.1.0.0/7B035BDD487A36C81FA905286ED6D0EB0/libxxx.so.1.0.0.sym
3、使用符号文件解析dmp文件 minidump_stackwalk error.dmp symbols
浙公网安备 33010602011771号