藉助eclipse的DDMS來分析執行緒執行情況
阿新 • • 發佈:2019-02-06
有時候程式執行出現死鎖或者訊號量卡死是很糾結的問題,單看程式碼很難分析定位問題,這時候可以藉助DDMS來檢視threads的執行情況,一目瞭然。
手機連線上USB,確保adb連通,然後啟動Eclipse裡的DDMS,這時候應該手機就正常連線上了
就如上圖中顯示的,只要連線上了就可以檢視某個程序裡的所有執行緒的活動了; 下面具體解釋下Threads標籤頁裡給出的每個欄位的意思:
ID: 虛擬機器分配的唯一的執行緒ID,在Dalvik裡,它們是從3開始的奇數。
Tid:linux的執行緒ID號
Stauts:執行緒狀態,比較多,有下面的一些
running: 正在執行程式程式碼
sleeping:執行了Thread.sleep()
monitor:等待接受一個監聽鎖。
wait::Object.wait(),等待被其他執行緒喚醒
native:正在執行native程式碼,
vmwait:等待虛擬機器,(這個不是很懂,高手指教,這個狀態在什麼情況下發生)
zombie:執行緒在垂死的程序
init:執行緒在初始化(我們不可能看到)
starting:執行緒正在啟動(我們不可能看到)
utime
stime:執行系統程式碼的累計時間
name:執行緒的名字
另外,右側每個Thread選中之後可以在下面看到Refresh按鈕,這個點了之後,可以看到執行緒的函式執行,結合Status可以知道目前情況;而出現問題時某個執行緒一般會變為monitor狀態,這時候就要特別留意他,並refresh下,檢查他的執行情況 ,再回頭結合程式碼,一般都能找到問題出在什麼地方。