Android高级课程Chaper01总结

张绍文老师的高级课程进阶的chapter01,我前前后后断断续续花了3-4周才算是真正从重新编译Breakpad到生成dump文件到将dump文件使用adb命令拉取到本地(就是一个简单的命令行,谁能想到我竟然卡在这里近2周),最后再使用你重新编译的Breakpad下的minidump_stackwalker 工具来根据 minidump 文件生成堆栈跟踪log,以及最后一步用addr2line来解析符号。

为什么感觉很难,因为对这些工具第一次使用,再者是文章里的一句话可能落实到你的实践上就会大有不同。

怎么将抓取到的日志拉取到本地中?
其实就是简单的一个adb命令行(将手机sd卡上的文件拉取到桌面):
adb pull /sdcard/crashDump /Users/***/Desktop

如何编译Breakpad一说。
1.直接下载了源https://github.com/google/breakpad
2.由于源码里没有附带上一些第三方的库,所以现在编译会出现异常,
我们需要下载 lss 库到Breakpad 源码目录 src/third_party
git clone https://chromium.googlesource.com/linux-syscall-support

  1. 然后在源码目录下执行。
    什么叫源码目录下?就是在终端用命令行cd到你的breakpad下
    ./configure && make
    make install

这样在你编译Breakpad成功后,就可以使用Breakpad下的minidump_stackwalker 工具来根据 minidump 文件生成堆栈跟踪log
minidump_stackwalk crash.dmp ./Symbol > dump.txt

注意:这里仍然是进入终端,使用命令行分别cd到minidump_stackwalker的具体路径和你的minidump 文件的路径

解析成功后的txt文件如下截图:


Android高级课程Chaper01总结_第1张图片
解析后dump文件.png

最后一步符号解析
符号就是如下截图上的libcrash -lib.so +0x620的“0x620”


屏幕快照 2019-02-11 上午10.55.07.png

符号解析,可以使用 ndk 中提供的addr2line来根据地址进行一个符号反解的过程,该工具在 $NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-addr2line
注意:此处要注意一下平台,如果是 arm64位的 so,解析是需要使用 aarch64-linux-android-4.9下的工具链addr2line

使用命令行:
arm-linux-androideabi-addr2line -f -C -e
例如我的是arm64,则终端进入输入命令行如下:
/Users/liqing/Library/Android/sdk/ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/bin/aarch64-linux-android-addr2line -f -C -e /Users/liqing/Downloads/Chapter01/sample/build/intermediates/cmake/debug/obj/arm64-v8a/libcrash-lib.so 0xdb34

//输出结果如下
Java_com_dodola_breakpad_MainActivity_crash

你可能感兴趣的:(Android高级课程Chaper01总结)