Monkey log異常分析說明

本文轉自http://blog.sina.com.cn/s/blog_44d19b500102vefl.html,感謝本文作者!


以下主要針對在Android-Phone項目中進行Monkey log進行分析和說明,可以對bug提交作爲參考。

要求熟悉,應用的包名。也就是說那個應用包出現問題,該屬於那個模塊,應用包名是判斷依據。

1、 Null指針異常

空指針異常主要是有NullPointerException異常提示,在Monkey測試過程中,該信息一般記錄在plog.log (locat中也有該信息)中。

如果Monkey命令被中斷,說明有異常信息並且有對應的打印信息,可以看到如下信息,說明幾個問題:

A、android.process.acore該進程出現異常

B、異常信息主要是由於NullPointerException引起的,也就是出現了空指針,導致了acore進程進入debug

C、具體的可以繼續分析是由哪個函數的那一行導致的,如可以從rollAnimate3dRotate.java文件中的275行查找等。

//at com.android.launcher.LauncherAnimator.ScrollAnimate3dRotate.drawFrame(ScrollAnimate3dRotate.java:275)

D、可能同一應用中存在多處的空指針異常,所以一旦出現空指異常後,可以分析和對比log信息,如果不一致的話,需要把新的log信息也一同添加到bug中,如果log信息一直的話,則不需要繼續補充沒有必要的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異常主要是由於應用程序本身的錯誤導致的異常。在Monkey測試過程中,該信息同樣記錄在plog.log (locat中也有該信息)中。一般情況下,出現的該問題,很可能在手動測試時也可以測試到。

A、 com.android.browser該進程進入debug

B、 出現的是IllegalStateException異常,該異常一般多是傳遞的參數非法或被多次調用時出現的異常

C、 Bug信息提交時,詳細信息中一般應該包含如下的log信息,方便開發人員分析和定位。

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

// 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.proce***equests(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、 低內存異常

低內存異常一般情況下,主要表現在出現OutOfMemoryError異常或者提示Out of memory,其後果同樣表現爲拋出OutOfMemoryError異常或者是通過kill process 來殺掉部分進程以釋放內存空間,當然如果被kill點關鍵的進程的話,也就可能導致部分應用會自動的退出。出現該情況時,主要是在進行頻繁的進行大量的操作導致的,所以使用手動的方式也是可能進行重現的。

A、 com.android.elastos.backup該進程出現的異常

B、 出現的是OutOfMemoryError異常,該異常一般多頻繁的操作(即多次調用某個函數,存在申請變量空間未釋放)導致的

C、 Bug信息提交時,詳細信息中同樣應該包含如下的log信息,方便開發人員分析和定位。

// 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#

或者出現plog信息的最後出現如下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、 操作無響應異常

操作無響應的問題,主要表現在Monkey運行過程中,出現某功能無響應,提示是否“強制關閉“或“等待“,同時會打印出相應的log信息,如下:

A、 可以說明com.android.soundrecorder該進程出現的無響應

B、 出現的是TimerOut異常,該異常一般出現時一般都會又keyDispatchingTimedOut提示

C、 目前,uPhone手機中經常出現操作無響應的幾個模塊包括:clock、camera、soundrecorder、broser等,根據開發人員分析其他模塊也是有可能出現操作無響應的,測試過程中,請多注意。

D、 出現無響應異常,一般情況下很難被修復,和發送事件的頻率也是有關係的,從質量上來要求的話,要求儘可能的減少出現操作無響應的頻率和時間。

// 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異常(系統重新啓動),即log信息的最後幾行會看到Restart System的打印信息,說明手機被自動的重啓或斷掉,有幾個方面的原因

1、 運行過程中,存在異常手機被自動重啓

2、 手機在運行過程中,進入設置中的恢復出場設置,導致手機重啓

3、 其他原因,如果手機後蓋移動等

B、 RuntimeException等異常,同樣的會在plog.log中可以看到相應的打印信息, java.lang.RuntimeException該問題多出現在操作無響應之後,或者是某應用的服務無法啓動或連接時,需要具體問題具體的分析

C、 StaleDataException、readException等異常, 在plog.log中可以看到相應的打印信息,也會有相應的信息: android.database.StaleDataException,該信息說明android的數據庫操作出現異常, 需要具體問題具體的分析

D、 IllegalArgumentException等異常,多少情況下爲說明向函數傳遞了一個不正確或不合法的參數需要具體問題具體的分析

E、 其他,帶補充和分析說明

 

說明幾點:

1、 log信息的分析,希望在bug信息的簡述中能夠明確說明清楚出現的是什麼異常,具體的log信息要單獨添加到詳細信息描述中,方便相關人員定位和查看。

2、 bug的提交,對於Monkey測試出現的問題:

a、 首先要求分析log信息

b、 再次要確認該bug是否已經提交?已經提交的bug和新運行出來的問題是否一致?

c、 如果不一致的話,是否屬於同一問題,如空指針異常,是的話就把該問題的log信息一起註釋到bug信息中,並添加所有的log信息

d、 如果不一致的,也不屬於同一問題的話,可以提交新的bug

3、 在java編程中,一般的異常都會拋出xxx Exception的信息,可以跟進xxx進行相關的判斷和分析,具體的異常則需要具體問題具體分析。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章