2023年11月29日发(作者:)

Monkeylog异常分析说明

以下主要针对在Android-Phone项⽬中进⾏Monkey log进⾏分析和说明,可以对bug提交作为参考。

要求熟悉,应⽤的包名。也就是说那个应⽤包出现问题,该属于那个模块,应⽤包名是判断依据。

Null指针异常

空指针异常主要是有NullPointerException异常提⽰,在Monkey测试过程中,该信息⼀般记录在 (locat中也有该信息)中。

如果Monkey命令被中断,说明有异常信息并且有对应的打印信息,可以看到如下信息,说明⼏个问题:

A该进程出现异常

B、异常信息主要是由于NullPointerException引起的,也就是出现了空指针,导致了acore进程进⼊debug

C、具体的可以继续分析是由哪个函数的那⼀⾏导致的,如可以从

⽂件中的275⾏查找等。

//at ame(:275)

、可能同⼀应⽤中存在多处的空指针异常,所以⼀旦出现空指异常后,可以分析和对⽐log信息,如果不⼀致的话,需要把新的log信息也⼀同添加到bug中,如果log信息⼀直的话,则

不需要继续补充没有必要的log信息。

**************************************************************************

// CRASH: (pid 1339)

// Short Msg:

interException

// Long Msg: interException

// Build Label: android:FIH/msm7627_surf/msm7627_surf/F0X:1.6/DONUT/0001_0_020:e

ng/release-keys

// Build Changelist: -1

// Build Time: 1271397239

// ID:

// Tag: AndroidRuntime

// interException:

// at ame(:275)

// at chDraw(:605)

// at ild(:1524)

// at chDraw(:1256)

// at chDraw(:258)

// at ild(:1524)

// at chDraw(:1256)

// at (:6329)

// at (:352)

// at ild(:1526)

// at chDraw(:1256)

// at (:6329)

// at (:352)

// at indow$(:1901)

// at (:1333)

// at mTraversals(:1098)

// at Message(:1618)

// at chMessage(:99)

// at (:123)

// at (:4203)

// at Native(:-2)

// at (:521)

// at Init$(:799)

// at (:557)

// at (:-2)

** System appears to have crashed at event 7908 of 5000000 using seed 0

debug异常

debug异常主要是由于应⽤程序本⾝的错误导致的异常。在Monkey测试过程中,该信息同样记录在 (locat中也有该信息)中。⼀般情况下,出现的该

问题,很可能在⼿动测试时也可以测试到。

r该进程进⼊debug

出现的是IllegalStateException异常,该异常⼀般多是传递的参数⾮法或被多次调⽤时出现的异常

Bug信息提交时,详细信息中⼀般应该包含如下的log信息,⽅便开发⼈员分析和定位。

************************************************************************

// CRASH: r (pid 5683)

// Short Msg: Connection is not open

// Long Msg: lStateException: Connection is not open

// Build Label: android:FIH/msm7627_surf/msm7627_surf/F0X:1.6/DONUT/0001_0_020:eng/release-keys

// Build Changelist: -1

// Build Time: 1271397239

// ID:

// Tag: AndroidRuntime

// lStateException: Connection is not open

// at Open(AndroidHttpClien

:153)

// at ketTimeout(AndroidHtt

:195)

// at tpConnection(:364)

// at sRequests(:225)

// at (:116)

** System appears to have crashed at event 34155 of 5000000 using seed 0**

低内存异常

低内存异常⼀般情况下,主要表现在出现OutOfMemoryError异常或者提⽰Out of memory,其后果同样表现为抛出OutOfMemoryError异常或者是通过kill

process 来杀掉部分进程以释放内存空间,当然如果被kill点关键的进程的话,也就可能导致部分应⽤会⾃动的退出。出现该情况时,主要是在进⾏频繁的进

⾏⼤量的操作导致的,所以使⽤⼿动的⽅式也是可能进⾏重现的。

该进程出现的异常

出现的是异常,该异常⼀般多频繁的操作(即多次调⽤某个函数,存在申请变量空间未释放)导致的

OutOfMemoryError

Bug信息提交时,详细信息中同样应该包含如下的log信息,⽅便开发⼈员分析和定位。

// CRASH: (pid 1581)

// Short Msg: bitmap size exceeds VM budget

// Long Msg: emoryError: bitmap size exceeds VM budget

// Build Label: android:FIH/msm7627_surf/msm7627_surf/F0X:1.6/DONUT/0001_0_020:eng/release-keys

// Build Changelist: -1

// Build Time: 1271397239

// ID:

// Tag: AndroidRuntime

// emoryError: bitmap size exceeds VM budget

// at Create(:-2)

// at Bitmap(:464)

// at Bitmap(:431)

// at ScaledBitmap(:336)

// at leBitmapBG(:2354)

// at (:2365)

// at ild(:1526)

// at chDraw(:1256)

// at (:6329)

// at ild(:1526)

// at chDraw(:1256)

// at (:6329)

// at (:352)

// at ild(:1526)

// at chDraw(:1256)

// at (:6329)

// at (:352)

// at indow$(:1901)

// at (:1333)

// at mTraversals(:1098)

// at Message(:1618)

// at chMessage(:99)

// at (:123)

// at (:4203)

// at Native(:-2)

// at (:521)

出现⽆响应异常,⼀般情况下很难被修复,和发送事件的频率也是有关系的,从质量上来要求的话,要求尽可能的减少出现操作⽆响应的频率和时间。

// NOT RESPONDING: ecorder (pid 1931)

ANR in process: ecorder (last in ecorder)

Annotation: keyDispatchingTimedOut

CPU usage:

Load: 8.24 / 8.41 / 8.25

CPU usage from 35911ms to 83ms ago:

ecorder: 4% = 3% user + 0% kernel / faults: 997 minor 43 maj

or

mediaserver: 2% = 2% user + 0% kernel / faults: 267 minor 3 major

: 2% = 0% user + 1% kernel / faults: 563 minor 194 major

system_server: 1% = 1% user + 0% kernel / faults: 1279 minor 5 major

al: 0% = 0% user + 0% kernel / faults: 180 minor 1 major

sensorserver_ya: 0% = 0% user + 0% kernel / faults: 47 minor 1 major

mmcqd: 0% = 0% user + 0% kernel

app_process: 0% = 0% user + 0% kernel / faults: 203 minor 1 major

ice: 0% = 0% user + 0% kernel / faults: 29 minor

kswapd0: 0% = 0% user + 0% kernel

gs: 0% = 0% user + 0% kernel / faults: 266 minor

port-bridge: 0% = 0% user + 0% kernel / faults: 19 minor

rpcrouter: 0% = 0% user + 0% kernel

: 0% = 0% user + 0% kernel / faults: 135 minor 8 major

TOTAL: 13% = 8% user + 4% kernel + 0% iowait

procrank:

PID Vss Rss Pss Uss cmdline

1209 35368K 25376K 15283K 14036K system_server

1342 32788K 24596K 14899K 14136K

……

// procrank status was 0

anr traces:

// meminfo status was 0

** System appears to have crashed at event 59034 of 5000000 using seed 0

其他异常

Restart System异常(系统重新启动),即log信息的最后⼏⾏会看到Restart System的打印信息,说明⼿机被⾃动的重启或断掉,有⼏个⽅⾯的原因

运⾏过程中,存在异常⼿机被⾃动重启

⼿机在运⾏过程中,进⼊设置中的恢复出场设置,导致⼿机重启

其他原因,如果⼿机后盖移动等

RuntimeException等异常,同样的会在中可以看到相应的打印信息, eException该问题多出现在操作⽆响应之后,或者是某应⽤

的服务⽆法启动或连接时,需要具体问题具体的分析

StaleDataExceptionreadException等异常, 中可以看到相应的打印信息,也会有相应的信息: ataException,该信息

说明android的数据库操作出现异常, 需要具体问题具体的分析

IllegalArgumentException等异常,多少情况下为说明向函数传递了⼀个不正确或不合法的参数需要具体问题具体的分析

其他,带补充和分析说明

说明⼏点:

log信息的分析,希望在bug信息的简述中能够明确说明清楚出现的是什么异常,具体的log信息要单独添加到详细信息描述中,⽅便相关⼈员定位和查看。

bug的提交,对于Monkey测试出现的问题:

⾸先要求分析log信息

再次要确认该bug是否已经提交?已经提交的bug和新运⾏出来的问题是否⼀致?

如果不⼀致的话,是否属于同⼀问题,如空指针异常,是的话就把该问题的log信息⼀起注释到bug信息中,并添加所有的log信息

如果不⼀致的,也不属于同⼀问题的话,可以提交新的bug

java编程中,⼀般的异常都会抛出xxx Exception的信息,可以跟进xxx进⾏相关的判断和分析,具体的异常则需要具体问题具体分析。