Monkey log異常分析說明
以下主要針對在Android-Phone項(xiàng)目中進(jìn)行Monkey?log進(jìn)行分析和說明夺谁,可以對bug提交作為參考胧后。
要求熟悉舍败,應(yīng)用的包名谤祖。也就是說那個(gè)應(yīng)用包出現(xiàn)問題,該屬于那個(gè)模塊甜孤,應(yīng)用包名是判斷依據(jù)协饲。
1、Null指針異常
空指針異常主要是有NullPointerException異常提示缴川,在Monkey測試過程中茉稠,該信息一般記錄在plog.log?(locat中也有該信息)中。
如果Monkey命令被中斷把夸,說明有異常信息并且有對應(yīng)的打印信息而线,可以看到如下信息,說明幾個(gè)問題:
A恋日、android.process.acore該進(jìn)程出現(xiàn)異常
B膀篮、異常信息主要是由于NullPointerException引起的,也就是出現(xiàn)了空指針岂膳,導(dǎo)致了acore進(jìn)程進(jìn)入debug
C誓竿、具體的可以繼續(xù)分析是由哪個(gè)函數(shù)的那一行導(dǎo)致的,如可以從rollAnimate3dRotate.java文件中的275行查找等谈截。
//at?com.android.launcher.LauncherAnimator.ScrollAnimate3dRotate.drawFrame(ScrollAnimate3dRotate.java:275)
D筷屡、可能同一應(yīng)用中存在多處的空指針異常涧偷,所以一旦出現(xiàn)空指異常后,可以分析和對比log信息毙死,如果不一致的話燎潮,需要把新的log信息也一同添加到bug中,如果log信息一直的話扼倘,則不需要繼續(xù)補(bǔ)充沒有必要的log信息跟啤。
**************************************************************************
//?CRASH:?android.process.acore?(pid?1339)
//?Short?Msg:?java.lang.NullPointerException
//?Long?Msg:?java.lang.NullPointerException
//?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
//?java.lang.NullPointerException:
//???at?com.android.launcher.LauncherAnimator.ScrollAnimate3dRotate.drawFrame(ScrollAnimate3dRotate.java:275)
//???at?com.android.launcher.Workspace.dispatchDraw(Workspace.java:605)
//???at?android.view.ViewGroup.drawChild(ViewGroup.java:1524)
//???at?android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
//???at?com.android.launcher.DragLayer.dispatchDraw(DragLayer.java:258)
//???at?android.view.ViewGroup.drawChild(ViewGroup.java:1524)
//???at?android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
//???at?android.view.View.draw(View.java:6329)
//???at?android.widget.FrameLayout.draw(FrameLayout.java:352)
//???at?android.view.ViewGroup.drawChild(ViewGroup.java:1526)
//???at?android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
//???at?android.view.View.draw(View.java:6329)
//???at?android.widget.FrameLayout.draw(FrameLayout.java:352)
//???at?com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1901)
//???at?android.view.ViewRoot.draw(ViewRoot.java:1333)
//???at?android.view.ViewRoot.performTraversals(ViewRoot.java:1098)
//???at?android.view.ViewRoot.handleMessage(ViewRoot.java:1618)
//???at?android.os.Handler.dispatchMessage(Handler.java:99)
//???at?android.os.Looper.loop(Looper.java:123)
//???at?android.app.ActivityThread.main(ActivityThread.java:4203)
//???at?java.lang.reflect.Method.invokeNative(Method.java:-2)
//???at?java.lang.reflect.Method.invoke(Method.java:521)
//???at?com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799)
//???at?com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
//???at?dalvik.system.NativeStart.main(NativeStart.java:-2)
**?System?appears?to?have?crashed?at?event?7908?of?5000000?using?seed?0
2、debug異常
debug異常主要是由于應(yīng)用程序本身的錯誤導(dǎo)致的異常唉锌。在Monkey測試過程中,該信息同樣記錄在plog.log?(locat中也有該信息)中竿奏。一般情況下袄简,出現(xiàn)的該問題,很可能在手動測試時(shí)也可以測試到泛啸。
A绿语、com.android.browser該進(jìn)程進(jìn)入debug
B、出現(xiàn)的是IllegalStateException異常候址,該異常一般多是傳遞的參數(shù)非法或被多次調(diào)用時(shí)出現(xiàn)的異常
C吕粹、Bug信息提交時(shí),詳細(xì)信息中一般應(yīng)該包含如下的log信息岗仑,方便開發(fā)人員分析和定位匹耕。
************************************************************************
//?CRASH:?com.android.browser?(pid?5683)
//?Short?Msg:?Connection?is?not?open
//?Long?Msg:?java.lang.IllegalStateException:?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
//?java.lang.IllegalStateException:?Connection?is?not?open
//???at?android.net.http.AndroidHttpClientConnection.assertOpen(AndroidHttpClien
tConnection.java:153)
//???at?android.net.http.AndroidHttpClientConnection.setSocketTimeout(AndroidHtt
pClientConnection.java:195)
//???at?android.net.http.Connection.openHttpConnection(Connection.java:364)
//???at?android.net.http.Connection.processRequests(Connection.java:225)
//???at?android.net.http.ConnectionThread.run(ConnectionThread.java:116)
**?System?appears?to?have?crashed?at?event?34155?of?5000000?using?seed?0**
3、低內(nèi)存異常
低內(nèi)存異常一般情況下荠雕,主要表現(xiàn)在出現(xiàn)OutOfMemoryError異澄绕洌或者提示Out?of?memory,其后果同樣表現(xiàn)為拋出OutOfMemoryError異痴ū埃或者是通過kill?process來殺掉部分進(jìn)程以釋放內(nèi)存空間既鞠,當(dāng)然如果被kill點(diǎn)關(guān)鍵的進(jìn)程的話,也就可能導(dǎo)致部分應(yīng)用會自動的退出盖文。出現(xiàn)該情況時(shí)嘱蛋,主要是在進(jìn)行頻繁的進(jìn)行大量的操作導(dǎo)致的,所以使用手動的方式也是可能進(jìn)行重現(xiàn)的五续。
A洒敏、com.android.elastos.backup該進(jìn)程出現(xiàn)的異常
B、出現(xiàn)的是OutOfMemoryError異常返帕,該異常一般多頻繁的操作(即多次調(diào)用某個(gè)函數(shù)桐玻,存在申請變量空間未釋放)導(dǎo)致的
C、Bug信息提交時(shí)荆萤,詳細(xì)信息中同樣應(yīng)該包含如下的log信息镊靴,方便開發(fā)人員分析和定位铣卡。
//?CRASH:?com.android.elastos.backup?(pid?1581)
//?Short?Msg:?bitmap?size?exceeds?VM?budget
//?Long?Msg:?java.lang.OutOfMemoryError:?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
//?java.lang.OutOfMemoryError:?bitmap?size?exceeds?VM?budget
//???at?android.graphics.Bitmap.nativeCreate(Bitmap.java:-2)
//???at?android.graphics.Bitmap.createBitmap(Bitmap.java:464)
//???at?android.graphics.Bitmap.createBitmap(Bitmap.java:431)
//???at?android.graphics.Bitmap.createScaledBitmap(Bitmap.java:336)
//???at?android.widget.AbsListView.preScaleBitmapBG(AbsListView.java:2354)
//???at?android.widget.AbsListView.draw(AbsListView.java:2365)
//???at?android.view.ViewGroup.drawChild(ViewGroup.java:1526)
//???at?android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
//???at?android.view.View.draw(View.java:6329)
//???at?android.view.ViewGroup.drawChild(ViewGroup.java:1526)
//???at?android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
//???at?android.view.View.draw(View.java:6329)
//???at?android.widget.FrameLayout.draw(FrameLayout.java:352)
//???at?android.view.ViewGroup.drawChild(ViewGroup.java:1526)
//???at?android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
//???at?android.view.View.draw(View.java:6329)
//???at?android.widget.FrameLayout.draw(FrameLayout.java:352)
//???at?com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1901)
//???at?android.view.ViewRoot.draw(ViewRoot.java:1333)
//???at?android.view.ViewRoot.performTraversals(ViewRoot.java:1098)
//???at?android.view.ViewRoot.handleMessage(ViewRoot.java:1618)
//???at?android.os.Handler.dispatchMessage(Handler.java:99)
//???at?android.os.Looper.loop(Looper.java:123)
//???at?android.app.ActivityThread.main(ActivityThread.java:4203)
//???at?java.lang.reflect.Method.invokeNative(Method.java:-2)
//???at?java.lang.reflect.Method.invoke(Method.java:521)
//???at?com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799)
//???at?com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
//???at?dalvik.system.NativeStart.main(NativeStart.java:-2)
**?System?appears?to?have?crashed?at?event?143290?of?100000000?using?seed?0#
或者出現(xiàn)plog信息的最后出現(xiàn)如下log信息也可能存在同樣問題:
<3>[56351.640641]?Out?of?memory:?kill?process?14177?(app_process)?score?247872?or?a?child
<3>[56351.641121]?Killed?process?14177?(app_process)
4、操作無響應(yīng)異常
操作無響應(yīng)的問題偏竟,主要表現(xiàn)在Monkey運(yùn)行過程中煮落,出現(xiàn)某功能無響應(yīng),提示是否“強(qiáng)制關(guān)閉“或“等待“踊谋,同時(shí)會打印出相應(yīng)的log信息蝉仇,如下:
A、可以說明com.android.soundrecorder該進(jìn)程出現(xiàn)的無響應(yīng)
B殖蚕、出現(xiàn)的是TimerOut異常轿衔,該異常一般出現(xiàn)時(shí)一般都會又keyDispatchingTimedOut提示
C、目前睦疫,uPhone手機(jī)中經(jīng)常出現(xiàn)操作無響應(yīng)的幾個(gè)模塊包括:clock害驹、camera、soundrecorder蛤育、broser等宛官,根據(jù)開發(fā)人員分析其他模塊也是有可能出現(xiàn)操作無響應(yīng)的,測試過程中瓦糕,請多注意底洗。
D、出現(xiàn)無響應(yīng)異常咕娄,一般情況下很難被修復(fù)亥揖,和發(fā)送事件的頻率也是有關(guān)系的,從質(zhì)量上來要求的話谭胚,要求盡可能的減少出現(xiàn)操作無響應(yīng)的頻率和時(shí)間徐块。
//?NOT?RESPONDING:?com.android.soundrecorder?(pid?1931)
ANR?in?process:?com.android.soundrecorder?(last?in?com.android.soundrecorder)
Annotation:?keyDispatchingTimedOut
CPU?usage:
Load:?8.24?/?8.41?/?8.25
CPU?usage?from?35911ms?to?83ms?ago:
com.android.soundrecorder:?4%?=?3%?user?+?0%?kernel?/?faults:?997?minor?43?maj
or
mediaserver:?2%?=?2%?user?+?0%?kernel?/?faults:?267?minor?3?major
android.process.media:?2%?=?0%?user?+?1%?kernel?/?faults:?563?minor?194?major
system_server:?1%?=?1%?user?+?0%?kernel?/?faults:?1279?minor?5?major
com.cootek.touchpal:?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
com.fihtdc.brservice:?0%?=?0%?user?+?0%?kernel?/?faults:?29?minor
kswapd0:?0%?=?0%?user?+?0%?kernel
com.android.settings:?0%?=?0%?user?+?0%?kernel?/?faults:?266?minor
port-bridge:?0%?=?0%?user?+?0%?kernel?/?faults:?19?minor
rpcrouter:?0%?=?0%?user?+?0%?kernel
com.android.mms:?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??android.process.acore
……
//?procrank?status?was?0
anr?traces:
//?meminfo?status?was?0
**?System?appears?to?have?crashed?at?event?59034?of?5000000?using?seed?0
5、其他異常
A灾而、Restart?System異常(系統(tǒng)重新啟動)胡控,即log信息的最后幾行會看到Restart?System的打印信息,說明手機(jī)被自動的重啟或斷掉旁趟,有幾個(gè)方面的原因
1昼激、運(yùn)行過程中,存在異常手機(jī)被自動重啟
2锡搜、手機(jī)在運(yùn)行過程中橙困,進(jìn)入設(shè)置中的恢復(fù)出場設(shè)置,導(dǎo)致手機(jī)重啟
3耕餐、其他原因凡傅,如果手機(jī)后蓋移動等
B、RuntimeException等異常,同樣的會在plog.log中可以看到相應(yīng)的打印信息,?java.lang.RuntimeException該問題多出現(xiàn)在操作無響應(yīng)之后,或者是某應(yīng)用的服務(wù)無法啟動或連接時(shí),需要具體問題具體的分析
C肠缔、StaleDataException夏跷、readException等異常,在plog.log中可以看到相應(yīng)的打印信息,也會有相應(yīng)的信息:?android.database.StaleDataException,該信息說明android的數(shù)據(jù)庫操作出現(xiàn)異常,需要具體問題具體的分析
D哼转、IllegalArgumentException等異常,多少情況下為說明向函數(shù)傳遞了一個(gè)不正確或不合法的參數(shù)需要具體問題具體的分析
E槽华、其他壹蔓,帶補(bǔ)充和分析說明
說明幾點(diǎn):
1、log信息的分析猫态,希望在bug信息的簡述中能夠明確說明清楚出現(xiàn)的是什么異常佣蓉,具體的log信息要單獨(dú)添加到詳細(xì)信息描述中,方便相關(guān)人員定位和查看亲雪。
2勇凭、bug的提交,對于Monkey測試出現(xiàn)的問題:
a义辕、首先要求分析log信息
b套像、再次要確認(rèn)該bug是否已經(jīng)提交?已經(jīng)提交的bug和新運(yùn)行出來的問題是否一致终息?
c、如果不一致的話贞让,是否屬于同一問題周崭,如空指針異常,是的話就把該問題的log信息一起注釋到bug信息中喳张,并添加所有的log信息
d续镇、如果不一致的,也不屬于同一問題的話销部,可以提交新的bug
3摸航、在java編程中,一般的異常都會拋出xxx?Exception的信息舅桩,可以跟進(jìn)xxx進(jìn)行相關(guān)的判斷和分析酱虎,具體的異常則需要具體問題具體分析