跳转至

日志分析

https://blog.csdn.net/wxlinwzl/article/details/7011755

  • 时间信息
  • 系统信息:内存,CPU,进程队列,虚拟内存,垃圾回收等
  • 虚拟机信息:进程和线程的跟踪信息
/data/anr  # 保存发生 ANR Crash 时的相关信息
/data/dontpanic/  # 保存发生 Kernel Panic 时的相关信息
/data/tombstones/  # 保存发生 Tombstone Crash 时的错误信息
/data/data/com.android.shell/files/bugreports  # 保存发生异常时的相关系统信息,也可以通过 adb shell bugreport 命令提取
MonkeyScreenLog.Log  # 保存 Monkey 测试过程、应用层错误信息,发生 Native Crash 时,在此文件也会有记录

Logcat

集成在 Android Studio 和 Android SDK 中,随时可以通过命令行或 IDE 查看

20240726225033

# 获取日志,按 Ctrl+C 停止记录
adb logcat  # 格式:日志时间,进程号,线程号,级别,TAG,内容
'
main:主log区,默认
events:事件相关的log
radio:射频,telephony相关的log
'

# 导出日志
adb logcat > logcat_output.txt

# 清除旧日志
adb logcat -c

# 格式化输出log
adb logcat -v <format>
adb logcat -v time *:D  # 限定日志级别,比如 Debug
adb logcat -v time MyAppTag:I  # 过滤特定标签,I 表示只显示 Info 级别及以上的日志

adb logcat -f <filename>  # 输出log到指定文件
adb logcat -b <buffer>  # 打印指定 buffer 的日志信息

# 使用 grep 过滤关键字信息,加 -i 忽略大小写,使用正则 "^..Activity"
# 获取包名和 Activity
adb logcat | grep START
'
在吊起应用时会显示 START:cmp=包名
所以打印带有 START 关键字的日志就可以找到当前吊起的应用的包名
'

# 获取入口
adb logcat| grep -i displayed
aapt dump badging mobike.apk | grep launchable-activity
apkanalyzer
  • bugreport

收集 dumpsys、dumpstate、logcat 等数据,用于后续分析,比如耗电量

adb bugreport > path/bugreport.log

用户日志上报

应用程序出现问题时,采用 HTTP 的方式将日志及时上报到后台进行分析

  • 方法 1

网上大部分是采用日志收集的第三方 jar 包来完成的,还有一种是自定义一个自己的 CrashHandler 实现 UncaughtExceptionHandler 接口,来捕获闪退信息然后上传到自己的服务器

如果用户误删了闪退的日志文件,那么就会导致无法及时上报闪退日志,也就无从分析隐藏的 Bug 了

  • 方法 2

在程序发生异常时提醒用户发生了什么样的异常,同时把本次捕获的 Exception 的字段写入到自己定义的 log 文件中,然后上报异常字段到自己的异常服务器上

从手机端或者后台都可以看到发生的异常堆栈,日志记录系统不借助与任何第三方 jar 包

异常 Exception

https://blog.csdn.net/zhangteng22/article/details/52947992

Java 层

Java 代码导致 JVM 退出,弹出「程序已经崩溃」的对话框,最终用户点击关闭后进程退出

Logcat 会在「AndroidRuntime」标签下输出 Java 的调用栈

崩溃堆栈:java.lang.xxxException, android.view.xxxException

https://blog.csdn.net/founder_chenhao/article/details/50171983

主要分框架层和应用层(FC 和 ANR)

  • FC, Force Closed 强制关闭

日志关键字:FATAL EXCEPTION(致命)

原因:空指针或未捕捉的异常

  • ANR, Application No Response 无响应

https://blog.csdn.net/dadoneo/article/details/8270107

日志关键字:ANR(后面加个空格可以过滤掉很多无效信息)

原因:死锁、系统反应迟钝、CPU 负载过重、应用主线程卡住,对其他请求响应超时

keyDispatchTimeout, Activity 5s无响应
BroadcaseTimeout, Receiver 10s无响应
ServiceTimeout, Service 20s无响应

NDK 层

NDK, Native Development Kit

Logcat 会在「debug」标签下输出 dump 信息

Tombstone Crash

一般与 so 相关

Kernel 层

Kernel Panic