Mtklog 分析(學習)

阿里瓜瓜發表於2017-04-20

常見log異常型別: JE  NE KE EE(external(modem) exception)

一、常見應用異常搜尋關鍵資訊

1. 常見應用crash的(系統提示***已停止執行) ,可以在main log中或crash_log中直接搜尋“ fatal exception” ;也可以在event_log中搜尋am_crash快速定位到問題

2.應用閃退

應用閃退一般有如下三種原因:

1).目前遇到最多的主要是因為low memory killer機制在記憶體達到一定閾值的時候會將大於對應adj程式給kill掉(這個一般在kernel log中搜尋關鍵字“ low memory kill ”就可以確認哪些是因為lmk機制而被kill);一般此情況下跟效能有關……。  【待實驗驗證】

2). 關聯程式被kill導致;

圖片1

一般在進行閃退分析時可以在events log中搜尋關鍵字" am_kill "或者" in dying proc "等

3).應用本身邏輯有執行finish動作而出現,比如點選鎖屏通知進入某個對應介面而介面沒有出現,這種情況需要分析對應的main_log、event_log;

a:根據出現閃退時間點在event_log搜尋am_resume_activity等am_*_activity相關判斷這過程中應用是否有啟動和退出的動作。 【待實驗驗證】

b: 在main_log或sys_log搜尋“ACT-AM_”相關資訊檢視對應activy生命週期相關資訊。【待實驗驗證】

其次就根據log跟蹤對應程式碼流程……

二、ANR (Application Not Responding)

1.ANR種類

1). Key Dispatch Timeout (8s)

按鍵或觸控事件在特定時間內無響應(origin:5s)

KEY_DISPATCHING_TIMEOUT = 8*1000

2) .Broadcast Timeout

BroadcastReceiver在特定時間內無法處理完成

BROADCAST_FG_TIMEOUT: 10s

BROADCAST_BG_TIMEOUT: 60s

按鍵和廣播事件時間內未響應,時間限定定義在ActivityManagerService.java類中

3).Service Timeout (20s)——-小概率型別

Service在特定的時間內無法處理完成

service時間內未響應時間限定在ActiveServices.java類中

SERVICE_TIMEOUT = 20*1000;

2.ANR產生原因 【不是很懂】

1)應用程式有一個主執行緒(main thread)和一個資訊佇列(main message queue) main thead == activity thread

2)主執行緒負責處理像Draw、Listen、receive等UI事件

3)主執行緒負責從訊息佇列中取出資訊並分發它

4)主執行緒在完成當前資訊處理之前,不會再取資訊佇列中的資訊

5)如果主執行緒在處理當前資訊時卡住,沒有及時分發,ANR就會出現

3.如何避免ANR

1):UI執行緒儘量只做跟UI相關的工作

2):耗時的工作(比如資料庫操作,I/O,連線網路或者別的有可能阻礙UI執行緒的操作)把它放入單獨的執行緒處理

3):儘量用Handler來處理UIthread和別的thread之間的互動

4.UI執行緒主要包括哪些?

1).Activity:onCreate(), onResume(), onDestroy(), onKeyDown(), onClick()等

2).AsyncTask: onPreExecute(), onProgressUpdate(), onPostExecute(), onCancel等

3).Mainthread handler: handleMessage(), post*(runnable r)等

4).other

5.分析ANR需要的log

1). MTKlog,主要是其中的Aee_exp和MobileLog

2). Trace.txt檔案(data/anr目錄下)或者bugreport日誌(使用adb bugreport > bugreport.txt或者GAT工具輸出)

一般當出現異常(JE\SWT\NE\KE等)時,會在手機中的/data/aee_exp目錄下儲存異常的db。 對於異常的型別和具體資訊,需要通過GAT工具解析db檔案。

6.ANR分析流程

圖片2

1

1

2

3

4

5

6

7

8

相關文章