Crash和ANR日志分析总结

1.获取日志

当在测试过程中发现闪退、崩溃、卡顿等问题时,可通过如下命令获取对应的日志并记录大概发生时间

adb logcat -d -v threadtime,color > /Users/wan/Downloads/Log/c1.txt
adb bugreport -d -v threadtime,color > /Users/wan/Downloads/Log/a1.txt

2.分析日志

得到日志后,可以根据包名和“start proc”确定被kill掉的进程号

cat c1.txt|grep -i "start proc"|grep -i "vidma.video.editor.videomaker"

根据上一步的进程号,筛选出与这个进程有关的所有日志,并定位到进程kill前的最后一刻

以4903进程为例,过滤日志如下,可以看到出现问题的原因

其他日志例子

3.Crash和ANR总结

1)进程被kill场景总结
  • 低内存查杀:有“lmkd”关键词

  • 不明原因被kill:有“signal 9”关键词

  • 系统内部崩溃:有F级别的日志和“Fatal”关键词

  • App线程崩溃:有“FATAL EXCEPTION”关键词

2)Crash问题总结
Crash产生原因

内存管理问题:内存不足、内存泄露、内存未授权

程序问题:数组越界、堆栈溢出、并发操作、逻辑问题

常见Exception:

  • 算术异常类:ArithmeticExecption

  • 空指针异常类:NullPointerException

  • 类型强制转换异常:ClassCastException

  • 数组负下标异常:NegativeArrayException

  • 数组下标越界异常:ArrayIndexOutOfBoundsException

  • 违背安全原则异常:SecturityException

  • 文件已结束异常:EOFException

  • 文件未找到异常:FileNotFoundException

  • 字符串转换为数字异常:NumberFormatException

  • 操作数据库异常:SQLException

  • 输入输出异常:IOException

  • 违法访问错误:IllegalAccessError

  • 内存不足错误:OutOfMemoryError

  • 堆栈溢出错误:StackOverflowError

设备兼容:设备多样性

网络兼容:网络切换等

日志分析思路

1)根据“FATAL EXCEPTION””关键词过滤Crash日志

2)确定Crash发生的进程号、类型

3)定位到具体原因

3)ANR问题总结
ANR分类
  • Input dispatching timed out:输入时间分发超过5s,包括按键和触屏事件;

  • Broadcast of Intent:前台广播需要在10s内完成,后台广播需要在60s内完成;

  • executing service:前台服务需要在20s内完成,后台则需要在200s内完成;

  • ContentProvider:非常少见,publish执行未在10s内完成;

  • Context.startForegroundService():应用调用startForegroundService,5s内未调用

startForeground出现ANR或者Crash,此问题属于应用未适配Android版本sdk;

ANR产生原因
  • 主线程存在耗时操作:主线程阻塞(Blocked)、挂起(suspend)、死锁、死循环、耗时操作等;

  • CPU资源被抢占:其他进程某一时间点CPU占比高、某一刻系统的CPU占比过高;

  • 主线程卡在binder通信的对端:需要通过binderinfo查看对端信息;

  • 系统或者应用自身可用内存紧张:系统一直在执行Lowmemorykiller操作查杀进程;

  • 应用频繁Crash:包括应用自身也容易导致前台应用出现ANR的现象;

  • 应用内存泄露;

  • 系统原因导致:如冻结、温度过高、多媒体(音视频、编解码)、包管理、Block I/O、Native Crash、

watchdog、内存黑洞、芯片能力等;

日志分析思路

1)根据“ANR in””关键词过滤ANR日志

2)确定ANR发生的进程号、类型

3)查看CPU和内存使用情况

典型实例
  • Block I/O

  • GPU渲染

  • 应用适配SDK

  • 相机模块遇到的问题

  • 音频模块遇到的问题

  • APK签名认证

  • 无焦点窗口

  • 内存泄漏

  • Binder耗尽

  • barrier阻塞

  • 消息过量

  • 内存不足

  • 应用死锁

  • 自身NE导致

  • 权限拦截

  • park锁耗时

  • cpu时间片不足

  • 空进程

  • 芯片性能不足

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值