Android NDK ANR问题分析处理

    Android开发中不可避免会遇到ANR的情况,如果是Java层发生了ANR,我相信这个日志很好分析,这篇文章主要介绍一下如果是C/C++层发生了ANR,该如何去处理和分析。

先说一下主要的步骤

1、拿到ANR日志,如果保存的有发版时的debugso或者是用debug的so运行时发生的问题,可以直接使用addr2line导出堆栈信息,否则就得尝试用debug的so复现。因为debug的so会保存符号表信息,所以体积比release的so会大很多。

2、导出堆栈之后能定位到发生问题的具体代码行,但是一定要用编译so时对应的代码去看,否则看到的行肯定是错误的,如果通过调用关系和发生问题的代码行可以分析出问题,那么直接修改就可以了,如果分析不出来,那么就需要在C/C++代码中增加日志,复现问题,结合日志和anr信息共同确定问题

具体的操作

1、addr2line

      这个工具是分析NDK层出现ANR必须使用的工具,只要你的电脑上装了NDK,里边自带的有这个工具,具体目录是android-ndk-r12b/toolchains/cpu架构/prebuit/bin/****_addr2line,里边分不同的CPU架构.

如果是arm64v8a的架构,选择第一种,armeabi或者armv7a的选择第二种,依次此类推

使用也比较简单,addr2line -e ****.so  005478f32a

多个行号用空格分开,如下所示:

2、日志分析,首先要看ANR发生的时间,还有进程号等信息,多进程环境下尤其要注意。

如果想从大量日志中筛选出来需要的进程信息,可以用下边的命令,比如筛选出进程号为7754的进程打印的日志信息。

grep '.' main_log_5__2019_0130_194243|grep -E '7754' >7754.txt

你可能感兴趣的:(Android NDK ANR问题分析处理)