一.首先介绍一些常用的log类型:
adb logcat -b main -v time>main.log 打印应用程序的 log
adb logcat -b radio -v time> radio.log 打印射频相关的 log , SIM STK 也会在里面, modem 相关的
ATcommand 等。
adb logcat -b events -v time 打印系统事件的日志,比如触屏事件。
sys.log :系统 Log, 详细输出各种 log
二.机器自动关机和重启问题定位步骤
1.定位关机动作和时间点(最好可以询问测试关机的时间点,如果没有就要自己排查了)
在main.log中搜索关键词
ShutdownThread: !!! Request to shutdown !!! //此句话说明有关动作
定位到关机的动作和关机时间
2.根据1定位的时间点查看手机电池的状态
查看 sys.log(一般monkey测试会出现电量不足自动关机问题,所以是monkey类型的重启最好看看电池状态)
PowerManagerService: updateIsPoweredLocked: wasPowered=false, mIsPowered=false, oldPlugType=0, mPlugType=0, mBatteryLevel=5
PowerUI.Notification: show low battery warning: level=5 [-2] playSound=true //此句说明弹出电量提示对话框
PowerManagerService: updateIsPoweredLocked: wasPowered=false, mIsPowered=false, oldPlugType=0, mPlugType=0, mBatteryLevel=5
PowerManagerService: updateIsPoweredLocked: wasPowered=false, mIsPowered=false, oldPlugType=0, mPlugType=0, mBatteryLevel=4
PowerManagerService: updateIsPoweredLocked: wasPowered=false, mIsPowered=false, oldPlugType=0, mPlugType=0, mBatteryLevel=0 //此句看到电池已经是0 了,而且充电类型不是1.2.4中的一种。
例子:
PowerManagerService( 962): updateIsPoweredLocked: wasPowered=true, mIsPowered=true, oldPlugType=2, mPlugType=2, mBatteryLevel=100
这个是插入usb调试的时候打出来的log,可以做个对比。
另外:wasPowered: 表示是否在充电
mPlugType:表示充电类型
充电类型有三种在BatteryManager.java 中定义:
// values of the "plugged" field in the ACTION_BATTERY_CHANGED intent.
// These must be powers of 2.
/** Power source is an AC charger. */
public static final int BATTERY_PLUGGED_AC = 1;
/** Power source is a USB port. */
public static final int BATTERY_PLUGGED_USB = 2;
/** Power source is wireless. */
public static final int BATTERY_PLUGGED_WIRELESS = 4;
完成2步骤,结果是没电关机,那就不用再分析了,直接告诉测试时没有电,关机了。如果电池有电并且是充电的状态(Monkey测试必须是AC充电状态)或是没有充电(一般重启或是自动关机异常可不用是充电状态)。那么接下来第3步是分析关机原因。
3.根据2的结果看什么原因导致关机
建议使用GAT工具,查看数据库,找到和步骤1对应关机时间点时出现的异常,分析异常类型,如果是system_server_crash。那很可能是这个引起的关机。我们要看backtrace 和匹配的时间点去具体分析问题。
更多信技术请关注: