Android-Daily-Interview
Android-Daily-Interview copied to clipboard
2019-07-02:Android Native Crash问题如何分析定位?
https://blog.csdn.net/crash163/article/details/51605926
1 利用breakpad,dump Native崩溃时日志信息, 2 利用addr2line跟ndk-strace等工具 根据崩溃日志偏移量定位具体源码位置 3 根据信号提示进行具体处理。 此步骤的难点在于1: Native Crash的时候整个app的状态是极其不稳定的,很可能由于保存日志(或者上报日志)等操作引起其他异常,所以此时最好fork一个子进程来保存当前进程的日志。 这个问题 崩溃优化的相关问题可以看看张绍文大佬极客时间的专栏,讲的非常细致。 我这个回答也是从中归纳了一点点皮毛
adb logcat | [your path]/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi
日志解析命令
ndk-stack
此命令即可以即时定位也可以将日志文件输出到某个路径后再定位,两者的区别在于后者比较灵活,可以再次分析,可查看文件名、方法名和行号
addr2line
根据名称的理解,意思是将地址转换成行号,没错,确实是这样的,日志文件中只有内存地址,对我们来说毫无意义,因此,我们要使用此命令将内存地址转换成我们能够看得懂的信息,如文件名、行号,缺陷是此命令不提供方法名
objdump
将so文件转换成asm(汇编)文件,在asm文件中通过内存地址即可找到发生问题的方法名
线上分析
上面的这些命令只能够进行本地分析,如果说用户的手机发生了native crash怎么办呢?这种情况我们需要集成收集BUG的相关SDK ,如Testin,集成后,如果有客户发生错误,我们就可以在Testin后台查看定位信息了
两种方式
1、单个查找
- 在日志文件中根据包名查找指针地址
- 使用addr2line将地址解析成具体的行号
2、全部查找
- 直接使用ndk-stack命令即可
参考链接
这是来自QQ邮箱的假期自动回复邮件。您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。