android log分析

2019-12-20  本文已影响0人  良人_Coder

date: 2019-12-19
email: panzh8266@163.com
github: https://github.com/Jess-Pan


coffe.jpg

1. monkey 跑测常见问题

monkey跑测一般会发生在硬件更换物料(内存、存储)后,需要进行一次跑测来确认物料的稳定性,提供该料是否可以用于生产的依据。作为系统软件开发,需要协助测试分析log文件内容,着重关注系统核心服务的存活状态、输出log是否为乱码、kernel层的报错等等会导致系统关机、重启、卡死等现象的问题

1.1 手机断电

<12>[22737.747509]  (2)[278:health@2.0-serv]healthd: battery l=0 v=3084 t=37.0 h=2 st=2 c=2042 fc=1397000 cc=0 chg=u

1.2 大量核心服务死亡

1.3 异常掉电

1.4 watchdog 引起的系统重启

watchdog 本身分为硬件看门狗和软件看门狗,我们正常看到的属于软件看门狗的范畴,它会在system_server发生死锁、程序跑飞时,杀死系统进程,然后重新启动system_server,让系统从不正常的状态回到工作状态中。这个过程我们称为软件重启,这个过程会输出一些制式的log

当然,偶尔也会看到硬件看门狗,log输出信息类似,但是会明显看到有关于内存地址的报错,出现这样的问题需要联系硬件确定问题报错点。

软件重启:重启核心服务,不涉及kernel层,上层应用重新启动但是下层依然在运行

硬件重启:kernel层重启,断电重启

1.5 kernel 层报错

[29125.251579] -(2)[95:hps_main]---[ end trace f42e54c6cd9c9843 ]---
[29125.809523] -(2)[95:hps_main]Kernel panic - not syncing: Fatal exception
[29128.972461] -(2)[95:hps_main]SMP: failed to stop secondary CPUs

这种报错属于驱动层面报错,需要联系驱动定位报错位置

1.6 log中出现大量乱码

1.7 monkey启动关机流程

// Allowing start of Intent { act=com.android.internal.intent.action.REQUEST_SHUTDOWN cmp=android/com.android.internal.app.ShutdownActivity } in package android
//[calendar_time:2019-01-01 23:36:25.452  system_uptime:40971637]

2. 手动测试常见问题

2.1 硬件功能问题

2.2 重载测试,应用失去响应

3.3 突然关机

3. 附上测试常用的monkey命令

3.1 monkey 系统跑测 (忽略报错)

adb shell "monkey 
-p com.google.android.calendar
-p com.mediatek.camera 
-p com.android.chrome
-p com.android.deskclock 
-p com.android.contacts 
-p com.facebook.katana 
-p com.google.android.apps.nbu.files
-p com.android.gallery3d 
-p com.google.android.gm.lite
-p com.google.android.talk 
-p com.instagram.android 
-p jp.naver.line.android 
-p com.google.android.apps.mapslite
-p com.google.android.apps.messaging
-p com.android.music 
-p com.android.dialer 
-p com.android.vending 
-p com.tencent.mobileqq 
-p com.android.settings 
-p com.skype.raider 
-p com.tencent.mm 
-p com.whatsapp 
-p com.twitter.android 
-p com.google.android.apps.youtube.mango
-p com.android.soundrecorder 
-p com.google.android.play.games
 --throttle 200 --ignore-crashes --ignore-timeouts --ignore-security-exceptions -v 10000000 > /sdcard/monkey.log"

3.2 单个应用跑测(不忽略错误)

adb shell "monkey -p com.mediatek.camera --throttle 200 -v 10000000 > /sdcard/monkey.log"

3.3 个人常用跑monkey脚本

#!/bin/bash
readonly time=$(date "+%Y%m%d%H%M")
readonly defaultCount=100000
readonly defaultTypeOne="--throttle 200 --ignore-crashes --ignore-timeouts --ignore-security-exceptions"
readonly defaultTypeTwo="--throttle 200"
readonly defaultlogUrl="${HOME}/Desktop/${time}"
readonly defaultlogUrl_SDcard="/sdcard/monkey_log.txt"

read -p "please input packages name: " packages
if [[ -z ${packages} ]]; then
    # null
    echo "未指定跑测应用包名"
    exit
fi
echo "packages : ${packages}"
echo 

read -p "please input monkey count: " inputCount
if [[ -z ${inputCount} ]]; then
    count=${defaultCount}
    echo "default count : ${defaultCount}"
else 
    count=${inputCount}
    echo "count : ${count}"
fi

echo 

read -p "please choose monkey test type \
1. ${defaultTypeOne} \
2. ${defaultTypeTwo} : " inputType
if [[ -z ${inputType} ]]; then
    type=${defaultTypeOne}
    echo "default type : ${type}"
elif [[ ${inputType} -eq 1 ]]; then
    type=${defaultTypeOne}
    echo "default type : ${type}"
elif [[ ${inputType} -eq 2 ]]; then
    type=${defaultTypeTwo}
    echo "default type : ${type}"
else
    echo "error !"
fi

echo

read -p "please choose space for monkey_log \
1. ${defaultlogUrl} \
2. ${defaultlogUrl_SDcard}: " logUrl

if [[ ${logUrl} -eq 1 ]]; then
    logUrl=${defaultlogUrl}

elif [[ logUrl -eq 2 ]]; then
        logUrl=${defaultlogUrl_SDcard}
        echo "logUrl : ${defaultlogUrl-SDcard}"
        read -p "Are you sure to continue? [y/n] " continue
        case ${continue} in
            [yY]*)
                adb shell "monkey ${packages} ${type} -v ${count} > ${logUrl}"
                exit

                ;;
            [nN]*)
                echo exit
                ;;
            *)
                echo "Just"
                exit
                ;;
        esac
        
else
    echo "input error!"
    exit
fi

echo "logUrl = ${logUrl}"
echo

read -p "Are you sure to continue? [y/n] " continue
case $continue in
    [yY]*)
        if [ ! -d ${logUrl} ]; then
            mkdir -p ${logUrl}
            echo "目标文件夹不存在,创建目录 : ${logUrl}"
        else
            echo "目标文件夹存在"
        fi

        adb shell monkey -p ${packages} ${type} -v ${count} 2>&1 | tee ${logUrl}/monkey_log.txt 
        ;;
    [nN]*)
        echo exit
        ;;
    *)
        echo "Just input n(N) or y(Y)"
        exit
        ;;
esac

3.4 打断monkey脚本

#!/bin/bash
monkey_pid=`adb shell ps -ef | grep monkey | grep -v "grep" | awk '{print $2}'`
echo "monkey_pid = ${monkey_pid}"
if [[ -z ${monkey_pid} ]]; then
    echo "没有monkey在执行"
else
    adb shell kill ${monkey_pid}
    echo "kill sucessfully"
fi
上一篇 下一篇

猜你喜欢

热点阅读