1. 程式人生 > >藉助eclipse的DDMS來分析執行緒執行情況

藉助eclipse的DDMS來分析執行緒執行情況

有時候程式執行出現死鎖或者訊號量卡死是很糾結的問題,單看程式碼很難分析定位問題,這時候可以藉助DDMS來檢視threads的執行情況,一目瞭然。

手機連線上USB,確保adb連通,然後啟動Eclipse裡的DDMS,這時候應該手機就正常連線上了

         未命名2 

就如上圖中顯示的,只要連線上了就可以檢視某個程序裡的所有執行緒的活動了; 下面具體解釋下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下,檢查他的執行情況 ,再回頭結合程式碼,一般都能找到問題出在什麼地方。