1. 程式人生 > >android除錯工具DDMS的使用詳解

android除錯工具DDMS的使用詳解

具體可見http://developer.android.com/tools/debugging/ddms.html DDMSIDEemultor、真正的android裝置架起來了一座橋樑。開發人員可以通過DDMS看到目標機器上執行的程序/現成狀態,可以 android的螢幕到開發機上,可以看程序的heap資訊,可以檢視logcat資訊,可以檢視程序分配記憶體情況,可以像目標機發送簡訊以及打電話,可 以像android開發傳送地理位置資訊。可以像gdb一樣attach某一個程序除錯。 SDK tools目錄下提供了ddms的完整版,直接執行即可。下面以EclipseDDMS perspective

為例簡單介紹DDMS的功能。

     debugjavaperspective一樣,安裝好adt後會有一個DDMSperspective,開啟即可。

 

 

 

device視窗羅列模擬器中所有的程序,右上角那一排按鈕分別為:除錯某個程序,更新某個程序,更新程序堆疊資訊,停止某個程序,最後一個圖片按 鈕時抓取android目前的螢幕。

 

    當你選中某個程序,並按下除錯程序按鈕時,如果eclipse中有這個程序的程式碼,那就可以進行原始碼級別的除錯。有點像

gdb attach。圖片抓取按鈕可以把當前android的顯示桌面抓到你的機器上,也是非常有用。

   右邊那個視窗中有threads heap file explorer選項卡。分別顯示執行緒統計資訊,棧資訊,以及android的檔案系統。

 

file explorer非常有用,他可以把檔案上傳到android手機,或者從手機下載下來,也可以進行刪除操作。選中file explorer選項卡後,按下面三個按鈕便可實現對android手機檔案系統的上傳,下載,刪除操作。

 

   emulator control

也是非常重要的,通過它可以像手機發送簡訊, 打電話,已經更新手機位置資訊。

 

總結:

  eclipse adt目前提供的的ddms功能只是真正ddms的一小部分,你 可以直接使用tools下面的ddms來使用所有功能。其中有一個檢視程序記憶體分配的功能比較有用。


DDMS全稱:Dalvik Debug Monitor Service
一,DDMS的作用它提供截圖,檢視執行緒和堆的資訊,logcat,程序,廣播狀態資訊,模擬來電呼叫和簡訊,虛擬地理座標等等。 

二,DDMS怎樣工作1,每一個Android應用都執行在一個Dalvik虛擬機器例項裡,而每一個虛擬機器例項都是一個獨立的程序空間。虛擬機器的 執行緒機制,記憶體分配和管理,Mutex等等都是依賴底層作業系統而實現的。所有Android應用的執行緒都對應一個Linux執行緒,虛擬機器因而可以更多的 依賴作業系統的執行緒排程和管理機制。 
2
DDMSIDE與裝置或模擬器之間的起著中間人的角色。 
3
DDMS啟動時會與ADB之間建立一個device monitoring service用於監控裝置。當裝置斷開或連結時,這個service就會通知DDMS 
4
,當一個裝置連結上時,DDSMADB之間又會建立VM monitoring service用於監控裝置上的虛擬機器。 
5
,通過ADB Deamon與裝置上的虛擬機器的debugger建立連結,這樣DDMS就開始與虛擬機器對話了。 

三,埠1,對於裝置上每個虛擬機器的debugger DDMS都會開啟一個監聽埠。埠從8600開始。 
2
8700 

四,左邊面板1,左邊顯示了所有當前能找到的所有模擬器或裝置列表和每個裝置當前正在執行的虛擬機器列表。虛擬機器是按程式的包命來顯示的。 

2
,通過這些列表可以找到執行著想除錯的activity的虛擬機器。每個虛擬機器旁邊的是“debugger pass-through”埠,連結到其中一個埠就會連結到裝置上對應的虛擬機器。不管如何,在用DDMS時,只需要連結到8700埠,因為DDSM 轉發所有的通訊到當前選擇的虛擬機器。這樣,就不用在每次切換虛擬機器是重新配置debugger埠。 

3
,當一個正在執行的程式呼叫waitForDebugger()函式時,客戶端名字旁邊會顯示一個紅色的icon,知道debugger連上對 應的虛擬機器,這是debugger會變成綠色。 

4
,如果看到叉icon,著意味著DDMS用於不能開啟虛擬機器的埠而不能建立debugger與虛擬機器建立連線。如果看到所有的虛擬機器是這樣, 很可能是有另外一個DDSM例項在執行。 
五,右邊面板1info 
這裡顯示關於選中的VM的一般的資訊,包括程序ID,包名,和虛擬機器版本。 

2
Threads 
執行緒檢視列出了此程序的所有執行緒。 
ID:
虛擬機器分配的唯一的執行緒ID,Dalvik裡,它們是從3開始的奇數。 
Tid
linux的執行緒ID,For the main thread in a process, this will match the process ID. 
Stauts
:執行緒狀態, 
running:
正在執行程式程式碼 
sleeping
:執行了Thread.sleep() 
monitor
:等待接受一個監聽鎖。 
wait:Object.wait() 
native
:正在執行native程式碼 
vmwait
:等待虛擬機器 
zombie
:執行緒在垂死的程序 
init
:執行緒在初始化(我們不可能看到) 
starting
:執行緒正在啟動(我們不可能看到) 
utime
:執行使用者程式碼的累計時間 
stime
:執行系統程式碼的累計時間 
name
:執行緒的名字 

4
VM Heap 
展示一些堆的狀態,在垃圾回收其間更新。當選定一個虛擬機器時, VM Heap檢視不能顯示資料,可以點選右邊麵包上的帶有綠色的”Show heap updates”按鈕,然後在點選”Cause GC “實施垃圾回收更新堆的狀態。 

6
Allocation Tracker 
在這個視圖裡,我們可以跟蹤每個選中的虛擬機器的記憶體分配情況。點選”Start Tracking”後點擊”Get Allocations “就可以看到。 

7
Emulator Control 
在這裡,可以模擬一些裝置狀態和行為。 
Telephony Status
:改變電話語音和資料方案的狀態,模擬不同的網路速度。 
TelePhony Actions
:傳送模擬的電話呼叫和簡訊到模擬器。 
Location Controls
:傳送虛擬的定位資料到模擬器裡,我們就可以執行定位之類的操作。可以收工的在Manual裡輸入經度緯度傳送到模擬器,也可以通過 GPXKML檔案。 

六,其他1File Explorer 
通過Device > File Explorer 就開啟File Explorer。這裡可以瀏覽檔案,上傳上載刪除檔案,當然這是有相應許可權限制的。 

2
Screen Capture 
通過Device > Screen Capture 就可以截圖。 

3
Exploring Processes 
通過Device  > Show process status ,這裡的資訊是通過shell命令”ps -x”輸出的。 
4
Examine Radio State 
通過Device > Dump radio,檢測廣播狀態。 

5
Stop a Virtual Machine 
通過Actions > Halt VM ,停止一個虛擬機器。