其项目地址为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)
-
如上一把梭就完成了,没啥难度,然后 java 层直接使用即可,如上你要看不懂就自己去学习下 C 编译原理及 NDK 相关基础吧。
-
当然是不要脸的附上我的 demo 地址https://github.com/yanbober/android-crash/tree/master/native-crash-core,很不幸的是这个项目夭折了,不过 native 捕获这块没啥大问题。
- 如果你想用 CMake,那更不用我说了,直接就是把上面这些 mk 翻译下就行,怎么翻译成
CMakeLists.txt
我就不扯蛋了。
【工匠若水 http://blog.csdn.net/yanbober 未经允许严禁转载,请尊重作者劳动成果。+微信 codedeveloper 联系我】
========================================================================
如下从几个维度分析说明了如何使用。
构建 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移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
oO-1710914773840)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-55c6MnmM-1710914773840)]