文章目录
- 一、Android崩溃日志
-
- 1、获取方法
-
- [1.1 通过adb logcat获取](#1.1 通过adb logcat获取)
- [1.2 通过adb shell dumpsys dropbox命令获取](#1.2 通过adb shell dumpsys dropbox命令获取)
- 2、导出设备Crash日志
- 3、导出设备ANR日志
- 4、常见日志类别
- 二、iOS崩溃日志
-
- 1、获取方法
-
- [1.1 xcode中打开](#1.1 xcode中打开)
- [1.2 手机上直接获取](#1.2 手机上直接获取)
- [2、Crash 头部信息](#2、Crash 头部信息)
一、Android崩溃日志
1、获取方法
1.1 通过adb logcat获取
bash
# 清除日志,新手上路时,日志内容很多,对于能必现的日志,可以先清除后重新获取
adb logcat -c
# 然后再次运行崩溃操作,再抓取日志
# 存储日志到当前目录下的 carsh.log 中
adb logcat -d *:W > crash.log
# W指的是警告以上日志
# 这个日志文件包含了所有打印的日志,需要自己筛选下崩溃日志,比如搜索 begin、crash、Exception
# 为了更精确的筛选日志,可以加入筛选条件
adb logcat -d *:W grep "包名" >crash.log
1.2 通过adb shell dumpsys dropbox命令获取
封装成shell脚本,可以快速打印最新的崩溃日志
bash
#!/bin/bash
# path="/data/system/dropbox" # 在手机这个目录下存储了崩溃日志
newest_time=$(adb shell dumpsys dropbox | grep 'data_app_crash' | awk 'END {print $1,$2}')
adb shell dumpsys dropbox --print ${newest_time}
# echo -e "时间是:${newest_time}"
2、导出设备Crash日志
bash
adb pull /storage/emulated/0/Android/data/com.xxx.comic/files/xxx/crash
3、导出设备ANR日志
bash
adb bugreport
4、常见日志类别
常见的异常:javaException(runtimeException):
- NullPointerException-空指针引用异常
- ClassCastException-类型强制转换异常
- IllegalArgumentException-传递非法参数异常
- ArithmeticException-算术运算异常
- ArrayStoreException-向数组中存放与声明类型不兼容对象异常
- IndexOutOfBoundsException-下标越界异常
- NegativeArraySizeException-创建一个大小为负数的数组错误异常
- NumberFormatException-数字格式异常
- SecurityException-安全异常
- UnsupportedOperationException-不支持的操作异常
二、iOS崩溃日志
1、获取方法
1.1 xcode中打开
打开xcode->windows->Devices and Simulators,选中设备查看View Device Logs,导出对应的log。
1.2 手机上直接获取
手机打开设置 -> 隐私 -> 分析与改进 -> 分析数据,在列表页找到对应项目的crash报告,分享到微信。 (导出的是.ips文件,后缀改为.crash)
2、Crash 头部信息
Incident Identifier:每个 Crash 生成的唯一的 uuid
CrashReporter Key:CrashReporter 的 uuid,如果自己捕获日志,这个可以忽略
Hardware Model:机型,如:iPhone12,3
Process:进程名和进程ID
Path:进程的可执行文件路径
Identifier:Info.plist 中配置的 CFBundleIdentifier 值,如:com.xxx.comic
Version:CFBundleVersion (CFBundleVersionShort) 即应用的Build号+版本号,如:7.58.0 (64906)
Architecture:机型的 CPU 架构,但是不是详细的架构名。比如 arm64e 在这里也是 ARM-64
Parent Process:父进程和进程ID
Data/Time:Crash发生的具体时间,如:2023-12-26 14:54:50.565 +0800
Launch Time:进程启动时间
OS Version:iOS 系统版本和 build号,如:iPhone OS 16.0.2 (Build 20A380)
Report Version:Crash日志格式的版本号,一般是 104。如果这个version偏高,用系统的symbolicatecrash命令不能符号化日志,一般如果看到是204, 改成104之后symbolicatecrash就可以符号化了