Android 开发高手课Chapter01课后练习

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的步骤)

Android 开发高手课Chapter01课后练习_第1张图片

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

 

Android 开发高手课Chapter01课后练习_第2张图片

3.然后去执行make install

生成的文件位置

这样就可以找到native crash 的位置了。

这个地方捕获crash的原理:https://mp.weixin.qq.com/s/g-WzYF3wWAljok1XjPoo7w?

你可能感兴趣的:(Android开发高手课练习)