Android Native Crash 捕获之 BreakPad,附面试答案

其项目地址为https://github.com/google/breakpad

【工匠若水 http://blog.csdn.net/yanbober 未经允许严禁转载,请尊重作者劳动成果。+微信 codedeveloper 联系我】

编译适合自己平台的库

======================================================================

上来一把梭,官方文档真的很详细了,不再多说,照着敲就行,记得自己要编译的是 Android 平台即可。上官方 Android 编译 README 文件。下面只说下注意的几个坑即可:

  • 注意你的 ndk 版本,建议使用 NDK 16b 版本或者低一点的。

  • 照着文档你可能发现编译直接失败,分析失败原因你会发现是很多文件 include 的linux_syscall_support.h头文件缺失了,全局搜代码也没有这个linux_syscall_support.h文件,一波 google 搜索linux_syscall_support.h关键词发现这玩意在https://chromium.googlesource.com/linux-syscall-support/里面,忽然记得文档说 Breakpad 来自 chromium,那这可能就是真相了,直接下载下来。下载下来放哪呢?莫慌,去看用他的地方吧,发现代码如此引用#include "third_party/lss/linux_syscall_support.h",妥了,直接把他连同 lss 目录复制到 Breakpad 项目的 third_party 下,然后编译一把过。

  • 官方README.ANDROID给出的是Android.mk配置,如果你需用通过 CMake 来编译则自己翻译成 CMakeLists.txt 就行,这玩意就看你自己了。

如果你采用Android.mk构建则直接按照如下操作即可:

APP_STL := stlport_static

APP_ABI := all

APP_CXXFLAGS := -std=c++11 -D__STDC_LIMIT_MACROS

ROOT_PATH := $(call my-dir)

如下是你 breakpad 项目的路径,直接引用其中的 Android.mk 编译,此步骤编译产物是一个静态库,名字为 breakpad_client,这是官方代码,我们没做任何修改哦。

include $(ROOT_PATH)/third-breakpad/android/google_breakpad/Android.mk

LOCAL_PATH := $(ROOT_PATH)

include $(CLEAR_VARS)

我们项目中对其包装的 jni 层 so 名字

LOCAL_MODULE := native-crash

我们项目中对其包装的 jni 层代码

LOCAL_SRC_FILES := NativeHandler.cpp

我们项目中链接 breakpad 项目静态产物

LOCAL_STATIC_LIBRARIES += breakpad_client

include $(BUILD_SHARED_LIBRARY)

  1. 如上一把梭就完成了,没啥难度,然后 java 层直接使用即可,如上你要看不懂就自己去学习下 C 编译原理及 NDK 相关基础吧。

  2. 当然是不要脸的附上我的 demo 地址https://github.com/yanbober/android-crash/tree/master/native-crash-core,很不幸的是这个项目夭折了,不过 native 捕获这块没啥大问题。

  • 如果你想用 CMake,那更不用我说了,直接就是把上面这些 mk 翻译下就行,怎么翻译成CMakeLists.txt我就不扯蛋了。

【工匠若水 http://blog.csdn.net/yanbober 未经允许严禁转载,请尊重作者劳动成果。+微信 codedeveloper 联系我】

Breakpad 怎么用

========================================================================

如下从几个维度分析说明了如何使用。

构建 so 注意事项

这里要特别注意一个问题,记得每次构建备份自己 obj 带符号表的 so 文件,发布一定要用不带符号表的小体积 so 文件,别搞混了,别问我为什么,这是常识。

获取 native crash 后的 dump

如上一顿操作后你会发现,你只用在你项目初始化时给他喂个路径就行,然后就等着 native 奔溃后触发他往你路径下写一个.dump文件吧。

如果你需要线上使用且需要保留所有的 dump,那就自己简单封装管理下文件目录啥的吧,然后每次启动发现有这个文件就上传到你服务器吧。

dump 文件怎么转成可阅读的崩溃堆栈

假设你程序现在 native crash 了,你也从服务端拿到 dump 文件了,接着我们需要对其做解析即可。

解析工具从哪来?还是 Breakpad 编译就行,具体参见官方文档里如何编译 minidump_stackwalk 工具部分吧。

如果你像我一样足够懒,或者因为第一次编译了 minidump_stackwalk 工具但是后来丢了,这时候你的第一选择肯定就是重新拉代码编译出一个工具。我想说的是,你可以偷懒,哈哈。

现成的 minidump_stackwalk 工具在哪里?

在这里,无论你是 Mac、windows、linux,我都试过,在 Android Studio 的安装目录下的bin\lldb\bin里面就存在一个对应平台的可执行文件叫做 minidump_stackwalk,这就是偷懒的办法。

所以我们直接用这个工具执行解析 dump 即可,如下操作:

./minidump_stackwalk xxooxx.dump > crash.txt

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

oO-1710914773840)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-55c6MnmM-1710914773840)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值