1.clone chapter01 https://github.com/AndroidAdvanceWithGeektime/Chapter01
2.打包运行这个项目(如果项目无法运行可能是项目没有配置NDK,先配置NDK)
3.点击里面的crash按钮让项目crash,
4.在手机的根目录下找到crashDump文件找到里面的dmp文件,复制到电脑
5.使用项目tools下的的minidump_stackwalk分析去打开这个dmp文件./minidump_stackwalk 0e2a6dce-ab84-4b4c-032b82bb-ee7ed92d.dmp >crashLog.txt(如果打不开,后面提供编译breakpad的步骤)
6.符号解析,可以使用 ndk 中提供的addr2line来根据地址进行一个符号反解的过程,该工具在
$NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-addr2line
使用的命令如下$ANDROID_NDK/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/bin/aarch64-linux-android-addr2line -f -C -e sample/build/intermediates/transforms/mergeJniLibs/debug/0/lib/arm64-v8a/libcrash-lib.so 0x600
运行结果
/Volumes/houde/github/Chapter01/sample/src/main/cpp/crash.cpp:10
注意:这个地方ANDROID_NDK是配置的NDKpath的名字, 0x600是上面图片中Thread 0 下面的地址,还有就是这个so的位置是在你的项目根目录下运行的命令。arm64使用aarch64-linux-android-4.9; arm使用arm-linux-androideabi-4.9 这个地方一定要注意。libcreash-lib.so的位置是根据cpu类型来生成,有可能是armeabi-v7a。
如果项目中的breakpad的minidump_stackwalk不能用这个地方就要自己去编译breakpad,编译步骤如下:
1.先去github上clone项目https://github.com/google/breakpad
2.在breakpad文件夹下,去编译breakpad
./configure && make
3.然后去执行make install
生成的文件位置
这样就可以找到native crash 的位置了。
这个地方捕获crash的原理:https://mp.weixin.qq.com/s/g-WzYF3wWAljok1XjPoo7w?