Google Breakpad捕获程序崩溃异常

本文详细介绍了如何在Linux和Windows平台上编译安装Google Breakpad,包括下载源码、编译过程、环境配置、使用方法以及如何通过addr2line和相关脚本工具分析dmp文件,以获取程序崩溃的详细堆栈信息。
摘要由CSDN通过智能技术生成

一、下载

https://github.com/google/breakpad

二、编译安装

1、Linux平台

(1)编译安装

解压到目录breakpad,然后在命令窗口cd到改目录下。执行命令:

常规编译
./configure --prefix=/opt/breakpad-ubuntu-x64
交叉编译
# 设置交叉编译工具链到环境变量
export PATH=/opt/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:$PATH

./configure \
CC=arm-linux-gnueabihf-gcc \
CXX=arm-linux-gnueabihf-g++ \
AR=arm-linux-gnueabihf-gcc-ar \
RANLIB=arm-linux-gnueabihf-gcc-ranlib \
--host=arm-linux-gnueabihf \
--prefix=/opt/breakpad-raspberrypi-armv7l

执行命令:make。会报错:

In file included from ./src/client/linux/dump_writer_common/thread_info.h:37:0,
                 from ./src/client/linux/minidump_writer/linux_dumper.h:54,
                 from ./src/client/linux/minidump_writer/minidump_writer.h:42,
                 from src/tools/linux/core2md/core2md.cc:34:
./src/common/memory_allocator.h:50:51: fatal error: third_party/lss/linux_syscall_support.h: 没有那个文件或目录
compilation terminated.
Makefile:5685: recipe for target 'src/tools/linux/core2md/core2md.o' failed
make: *** [src/tools/linux/core2md/core2md.o] Error 1

解决方法: 下载linux_syscall_support.h文件,创建目录breakpad/src/third_party/lss/,并把文件放入其中,然后重新执行make命令。
编译结束后,执行命令:sudo make install,即可安装到目录/opt/breakpad-ubuntu-x64中,如:
在这里插入图片描述

(2)环境配置
export BREADKPAD_ROOT=/opt/breakpad-ubuntu-x64
# 运行依赖
export LD_LIBRARY_PATH=$BREADKPAD_ROOT/lib:$LD_LIBRARY_PATH
# 开发依赖
export PATH=$BREADKPAD_ROOT/bin:$PATH
export CPATH=$BREADKPAD_ROOT/include/breakpad:$CPATH
export LIBRARY_PATH=$BREADKPAD_ROOT/lib:$LIBRARY_PATH
(3)使用
#include <iostream>
#include "client/linux/handler/exception_handler.h"

/* 写完minidump后的回调函数 */
static bool dumpCallback(const google_breakpad::MinidumpDescriptor& descriptor, void* context, bool succeeded)
{
   
	std::cout << "Dump path: " << descriptor.path() << std::endl;
	return succeeded;
}

/* 触发crash来测试 */
void crash()
{
   
	volatile int* a = (int*)(NULL);
	*a = 1;
}

int main(int argc, char* argv[])
{
   
	/* 初始化 */
	ExceptionHandler google_breakpad::MinidumpDescriptor descriptor("/home/jaron/dump");
	/* minidump文件写入到的目录 */
	google_breakpad::ExceptionHandler eh(descriptor, NULL, dumpCallback, 
以下是Qt程序崩溃异常捕获的方法: 1.使用qInstallMessageHandler()函数来自定义消息处理程序,以便在程序崩溃时获取相关信息。以下是一个示例代码: ```cpp void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg) { QByteArray localMsg = msg.toLocal8Bit(); switch (type) { case QtDebugMsg: fprintf(stderr, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); break; case QtInfoMsg: fprintf(stderr, "Info: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); break; case QtWarningMsg: fprintf(stderr, "Warning: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); break; case QtCriticalMsg: fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); break; case QtFatalMsg: fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); abort(); } } int main(int argc, char *argv[]) { qInstallMessageHandler(myMessageOutput); QApplication a(argc, argv); // ... return a.exec(); } ``` 2.使用Qt的调试器来捕获异常。在Qt Creator中,可以通过以下步骤来使用调试器: - 在Qt Creator中打开项目并设置断点。 - 单击“调试”按钮以启动调试器。 - 在调试器中运行程序并观察变量和堆栈。 - 如果程序崩溃,调试器将停止并显示崩溃信息。 3.使用第三方库来捕获异常,例如Google BreakpadGoogle Breakpad是一个开源库,可用于在Windows、Linux和Mac OS X上捕获程序崩溃信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值