Android-Daily-Interview icon indicating copy to clipboard operation
Android-Daily-Interview copied to clipboard

2019-07-02:Android Native Crash问题如何分析定位?

Open Shanlovana opened this issue 5 years ago • 6 comments

Shanlovana avatar Jul 02 '19 00:07 Shanlovana

https://blog.csdn.net/crash163/article/details/51605926

ADrunkenLiBai avatar Jul 02 '19 01:07 ADrunkenLiBai

1 利用breakpad,dump Native崩溃时日志信息, 2 利用addr2line跟ndk-strace等工具 根据崩溃日志偏移量定位具体源码位置 3 根据信号提示进行具体处理。 此步骤的难点在于1: Native Crash的时候整个app的状态是极其不稳定的,很可能由于保存日志(或者上报日志)等操作引起其他异常,所以此时最好fork一个子进程来保存当前进程的日志。 这个问题 崩溃优化的相关问题可以看看张绍文大佬极客时间的专栏,讲的非常细致。 我这个回答也是从中归纳了一点点皮毛

KollerWithDoris avatar Aug 02 '19 07:08 KollerWithDoris

adb logcat | [your path]/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi

LZzzzz avatar Aug 22 '19 08:08 LZzzzz

日志解析命令

ndk-stack

  此命令即可以即时定位也可以将日志文件输出到某个路径后再定位,两者的区别在于后者比较灵活,可以再次分析,可查看文件名、方法名和行号

addr2line

  根据名称的理解,意思是将地址转换成行号,没错,确实是这样的,日志文件中只有内存地址,对我们来说毫无意义,因此,我们要使用此命令将内存地址转换成我们能够看得懂的信息,如文件名、行号,缺陷是此命令不提供方法名

objdump

  将so文件转换成asm(汇编)文件,在asm文件中通过内存地址即可找到发生问题的方法名

线上分析

  上面的这些命令只能够进行本地分析,如果说用户的手机发生了native crash怎么办呢?这种情况我们需要集成收集BUG的相关SDK ,如Testin,集成后,如果有客户发生错误,我们就可以在Testin后台查看定位信息了

两种方式

1、单个查找
  • 在日志文件中根据包名查找指针地址
  • 使用addr2line将地址解析成具体的行号
2、全部查找
  • 直接使用ndk-stack命令即可

参考链接

Android Native crash日志分析

aositeluoke avatar Dec 06 '20 04:12 aositeluoke

这是来自QQ邮箱的假期自动回复邮件。您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。

KollerWithDoris avatar Jan 13 '22 14:01 KollerWithDoris