Android 开发高手课 01 课后作业,使用 breakpad 捕获一次 native 崩溃
工程配置
1. 从github git clone 项目。
2. 下载 ndk-16 dl.google.com/android/rep…
使用 ndk 21 版本无法编辑成功,而 ndk 16 则可以成功编译
3. local.properties 配置下载好的 ndk路径。
ndk.dir=/Users/xinwa/repo/android-ndk-r16b
复制代码
4. 使用 homebrew 安装 cmake
brew install cmake
复制代码
5. 以上几步完成之后,重新编译构建项目,此时会提示 「无法打开 clang,因为无法验证开发者」。出现该提示之后需前往 ndk目录下 clang 程序,然后右键使用终端打开,之后该提示即可消失。
捕获 Native 异常
1. 点击 crash 按钮会发生 native 崩溃
2. 生成的 crash dump 信息,在授予 sdcrad 权限的情况下存放在 /sdcard/crashDump下
3. 使用工程 tools 目录下的 minidump_stackwalker 工具来根据 minidump 文件生成堆栈跟踪log
./tools/mac/minidump_stackwalk crashDump/***.dmp -> crashLog.txt
复制代码
4. 处理生成日志文件为空的情况
上述这一步如果生成的 crashLog.txt 文件内容为空。则是因为缺少必要的动态库链接库导致的。所以需要编译 bradkpad 源码。
clone github.com/google/brea… 库到本地,然后执行 ./configure && make 进行项目编译。编译好之后的 minidump_stackwalk这个文件在src/processor/目录中,利用这个路径下的程序,就可解决缺少
动态链接库的问题,从而生成有堆栈信息的 log 文件
5. 打开该文件即可拿到详细的 crash 日志
6. 符号解析
日志中的 0x77e 等符号需要进行解析,即可知道对应代码。可以使用 ndk 中提供的addr2line根据地址进行一个符号反解的过程,该工具在 $NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-addr2line
x86_64-linux-android-addr2line -f -C -e /Users/xinwa/shaowen/Chapter01/libcrash-lib.so 0x77e
输出: Crash()
复制代码
最右侧的参数输入想要解析的符号,程序会输出符号对应的结果
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END