Linux/Windows下的崩溃调试技术-Breakpad

Linux使用Breakpad 生成dump文件以及分析工具

0. 前言

在Windows系统中,当程序发生崩溃时,为了捕获和分析崩溃原因,通常可以使用dump文件,dump文件又可以分为:mini-dump 和 full-dump

mini-dump

定义:全称小存储器转储文件记录,它包含了可以确定计算机为什么意外终止的最小有用信息集合。
特点:通常很小,只有几KB到几十KB不等,因此很容易通过电子方式发送给软件开发人员。
包含了Stop消息及其参数、加载的驱动程序列表、已停止的处理器、进程和线程的上下文等信息。
由于包含的信息有限,可能无法定位非正在运行的线程出现问题时导致的错误。
用途:在硬盘空间有限或需要快速分析时,mini-dump非常有用。

full-dump(Full User-Mode Dump 或 Complete Dump)

定义:Full Dump包含了进程的整个内存空间,以及程序的image、handle table等完整的调试信息。
特点:通常非常大,因为它包含了崩溃时进程的全部内存内容、提供了最完整的崩溃信息,可以帮助开发者精确地定位问题、由于文件较大,传输和分析可能需要更多时间和资源。
用途:在需要深入分析崩溃原因或定位复杂问题时,Full Dump是最佳选择。

在不同平台下的实现原理:
Windows:通过SetUnhandledExceptionFilter()设置崩溃回掉函数
Linux:监听 SIGILL SIGSEGV 等异常信号 获取崩溃事件
Max OS:监听 Mach Exception Port 获取崩溃事件

1. 版本说明:

breakpad 包含了一系列组件,包含客户端、服务端等组件,他们共同实现了一个崩溃报告系统

2024.05.31 下载自Github 最新版本
https://github.com/google/breakpad

2. breakpad源码编译

注意:编译时可能会提示缺少文件:lss/linux_syscal_support.h ,搜索下载即可

开始编译:

./configure --prefix=$PWD/build
make -j8
make install

以上指令将构建以下工具:

minidump_statckwalk.exe (Windows/Linux)
minidump_dump.exe (Windows/Linux)
dump_syms (Linux)
minidump-2-core (Linux)

3. QtCreator调试定位

  • 使用 minidump-2-core -v 工具根据dump文件生成GDB需要的核心转储文件(计算机程序在异常终止时记录下来的内存状态)
minidump-2-core -v 28d9f41f-9a3e-4a29-d0f735a9-6ed1382c.dmp > core.out
  • 打开QtCreator -> Debug -> Start Debugging -> Load Core File…选择上面的core.out,选择带Debug信息的可执行文件

注意是项
1、在编译的时候,需要在Release版程序中生成调试信息,也就是说需要生成pdb文件
2、使用strip -s App_With_Debug_Info() 将调式信息剥离 ,然后App(发给客户使用)

4. 生成符号表信息(Linux 下 sym, win下 pdb文件)

在Qt Release模式下生成符号表信息,需要在pro文件中加入以下两行:

# Linux下 Qt的Release模式下生成调试信息的可执行文件,然后使用工具dump_syms生成sym符号表
QMAKE_CXXFLAGS += -g #必须
# msvc下生成pdb文件:
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO

Qt在Rlease下生成崩溃信息, 最好放到breakpad.pri中:

msvc:CONFIG(release, debug|release) {
   
QMAKE_CFLAGS_RELEASE   -= -O2              # Remove C optimization
QMAKE_CFLAGS_RELEASE   += -Zi              # Generates debug information into pdb file
QMAKE_CXXFLAGS_RELEASE -= -O2              # Remove C++ optimization
QMAKE_CXXFLAGS_RELEASE += -Zi              # Generates debug information into pdb file
QMAKE_LFLAGS_RELEASE   -= /INCREMENTAL:NO  # Remove INCREMENTAL link
QMAKE_LFLAGS_RELEASE   += /DEBUG           # Generates debug information into exe file
message("Turn off optimization and generates debug information for MSVC compiler")
}

mingw:CONFIG(release, debug|release
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值