qBreakpad 踩坑记:ARM 平台崩溃转储收集

在 ARM 嵌入式平台上,程序崩溃后往往只留下一句模糊的报错,日志里很难定位到崩溃现场。qBreakpad 是基于 google-breakpad 封装的 Qt 库,可以在程序崩溃时自动生成 dump 文件,方便事后用符号文件还原调用栈。本文记录一次在 ARM 环境下接入 qBreakpad 时踩到的编译坑及解决办法。

背景问题

在 ARM 环境下有一个不太确定的 bug,导致程序长时间运行后突然崩溃。由于问题难以复现、又拿不到崩溃现场的信息,于是决定编译 qBreakpad 集成到程序里,用它监控并生成 dump 文件。

拿到了 dmp 文件之后,还需要配套的 dump 分析工具来解析,结果在编译分析工具的时候又遇到了问题,正好借此机会把整个过程记录下来。

编译踩坑与解决

编译 qBreakpad 的过程中,执行 make 时报了如下错误:

linux_syscall_support.h:2408:75: error: listing the stack pointer register 'rsp' in a clobber list is deprecated

这个错误的直接原因是:linux_syscall_support.h 中的内联汇编把栈指针寄存器 rsp 写进了 clobber list,而较新版本的 GCC 已经将这种写法标记为废弃(deprecated),GCC 9 及以上版本会直接报错。这与代码本身的功能无关,纯粹是新编译器的兼容性问题。

作者的最终解决方案是给该处代码打了一个补丁:直接把 clobber list 中对 rsp 的声明去掉,重新编译即可通过。上游也有对应的 issue 记录了同样的问题,可以参考下面的链接。

配套资源

整理了两个配套资源,分别是适配好的 qBreakpad 库(ARM/x64)和编译好的 dump 分析工具,均来自 CSDN 下载:

小结

在 ARM 平台上接入 qBreakpad,整体流程并不复杂,主要门槛在于用新版 GCC 编译时 linux_syscall_support.h 的兼容问题——遇到 listing the stack pointer register 'rsp' in a clobber list is deprecated 这类报错,直接去掉对应的 clobber 声明重新编译即可。搞定之后程序崩溃时就能稳定拿到 dump 文件,再配合符号文件和分析工具,定位长时间运行才复现的崩溃问题就有了抓手。


   转载规则


《qBreakpad 踩坑记:ARM 平台崩溃转储收集》 吴杭沉 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
llama.cpp 源码解析(一):GGML——大模型推理引擎是如何设计的 llama.cpp 源码解析(一):GGML——大模型推理引擎是如何设计的
几周前我开始看 llama.cpp 的源码。想看看”为什么我这台本地的笔记本也能跑得动 7B 甚至 14B 模型”,结果发现——这个项目太有意思了。所以我准备尝试写篇系列文章(又开新坑😂)。 从推理引擎开始,如果你也想知道 llama.c
2026-01-01
下一篇 
Shell 实用技巧集锦 Shell 实用技巧集锦
Shell 是每个开发者的日常工具,掌握一些高频技巧能显著提升命令行下的工作效率。本文整理了别名定义、后台任务管理、重定向与管道、批量处理、进程管理、磁盘排查等实用技巧,每个技巧都配有可直接运行的示例,方便边看边练。 alias 命令别名对
2021-01-24
  目录