android調試工具DDMS

DDMS工做機制
   DDMS全稱Dalvik Debug Monitor Service.DDMS爲IDE和emultor及真正的android設備架起來了一座橋樑,Android DDMS將捕捉到終端的ID,並經過adb創建調試器,從而實現發送指令到測試終端的目的
1)每個Android應用都運行在一個Dalvik虛擬機實例裏,而每個虛擬機實例都是一個獨立的進程空間。虛擬機的線程機制,內存分配和管理,Mutex等等都是依賴底層操做系統而實現的。全部Android應用的線程都對應一個Linux線程。
2)DDMS啓動時會與ADB之間創建一個device monitoring service用於監控設備。當設備斷開或連接時,這個service就會通知DDMS
3)當一個設備連接上時,DDSM和ADB之間又會創建VM monitoring service用於監控設備上的虛擬機。
4)經過ADB Deamon與設備上的虛擬機的debugger創建連接,這樣DDMS就開始與虛擬機對話了
 
   經過DDMS看到目標機器上運行的進程/現成狀態,能夠 android的屏幕到開發機上,能夠看進程的heap信息,能夠查看logcat信息,能夠查看進程分配內存狀況,能夠像目標機發送短信以及打電話,能夠向android發送地理位置信息。能夠像gdb同樣attach某一個進程調試。 android SDK tools提供了ddms的功能。
    Eclipse安裝好adt後會有一個DDMS得perspective.切換到DDMS的視圖下:
   <ignore_js_op>
DDMS視圖組成
   如上圖所示,DDMS視圖由3部分組成:左上窗口(device窗口),左下窗口(Emulator Control),右邊面板組成。
一、device窗口
device窗口顯示了全部當前能找到的全部模擬器或設備列表和每一個設備當前正在運行的虛擬機列表。虛擬機是按程序的包命來顯示的。device標籤欄右上角那一排按鈕分別爲:調試某個進程,更新某個進程,更新進程堆棧信息,中止某個進程,最後一個圖片按 鈕時抓取android目前的屏幕。
二、Emulator Control
在這裏,能夠模擬一些設備狀態和行爲。
Telephony Status:改變電話語音和數據方案的狀態,模擬不一樣的網絡速度。
TelePhony Actions:發送模擬的電話呼叫和短信到模擬器。
Location Controls:發送虛擬的定位數據到模擬器裏,咱們就能夠執行定位之類的操做。能夠收工的在Manual裏輸入經度緯度發送到模擬器,也能夠經過 GPX和KML文件。
三、右面板
右邊那個窗口中有threads, heap ,Allocation Tracker, file explorer選項卡。分別顯示線程統計信息,棧信息,分配跟蹤器以及android的文件系統。
1)Threads
線程視圖列出了此進程的全部線程。
<ignore_js_op>

ID:虛擬機分配的惟一的線程ID,在Dalvik裏,它們是從3開始的奇數。
Tid:linux的線程ID,For the main thread in a process, this will match the process ID.
Stauts:線程狀態,
utime:執行用戶代碼的累計時間
stime:執行系統代碼的累計時間
name:線程的名字

2)VM Heap
    展現一些堆的狀態,在垃圾回收其間更新。當選定一個虛擬機時, VM Heap視圖不能顯示數據,能夠點擊右邊麪包上的帶有綠色的」Show heap updates」按鈕,而後在點擊」Cause GC 「實施垃圾回收更新堆的狀態。
3)Allocation Tracker
    在這個視圖裏,咱們能夠跟蹤每一個選中的虛擬機的內存分配狀況。點擊」Start Tracking」後點擊」Get Allocations 「就能夠看到。
4)File Explorer
經過Device > File Explorer 就打開File Explorer。這裏能夠瀏覽文件,上傳上載刪除文件,固然這是有相應權限限制的。
 
經常使用工具
一、堆查看
點擊Update Heap(更新堆)按鈕,得到有關選定虛擬機中堆分配的信息。

<ignore_js_op>
圖 2

<ignore_js_op>
圖 3
    點擊"Cause GC"開始.堆的詳細信息被顯示出來,並附有針對特定分配類型的分配大小圖示。若是您有分配泄漏,這多是一個很好的檢查點,經過觀看Heap Size(堆大小)的整體趨勢,確保在應用運行期間它不會一直變大。
 
二、Allocation Tracker(分配跟蹤器)
Allocation Tracker(分配跟蹤器)視圖中顯示了有關分配的更深層細節。點擊「Start Tracking(開始跟蹤)」,在應用中執行某個操做,而後點擊「Get Allocations(得到分配)」。
<ignore_js_op>
圖 4

所示列表按分配排序,首先顯示最新的分配。選中它可看到一個關於分配如何建立的堆棧軌跡(stack trace)。
仔細查看分配細節,下面的代碼看起來有改進的空間:
dataStr += String.format(" Std. Dev.: %.3f, %.3f, %.3f\n", devX, devY, devZ);
上例可簡單重構爲下面的代碼,節省構造臨時char[]的開銷。.
dataStrBuilder.append(String.format(" Std. Dev.: %.3f, %.3f, %.3f\n", devX, devY, devZ));

三、Method Profiling(方法分析)linux

Method Profiling(方法分析)是DDMS的一款工具,對於快速概覽應用中時間的消耗分佈很是有用,也可用於時間關鍵型函數的詳細查看。

<ignore_js_op>

圖 6

在應用運行並執行某個有趣的任務時,若是您想得到更多有關該任務的性能數據,點擊「Start Method Profiling(開始方法分析)」。分析器只收集少許數據(沒見過超過2或3秒),因此,幾分鐘後再次單擊該圖標以中止收集。從DDMS中激活方法分析器可以使工具自動使用內部存儲來存儲分析結果,當捕捉完成後,將它們發送回主機,做進一步分析。

IDE將自動啓動Traceview窗口,幫助您在IDE(圖6)中分析結果。

<ignore_js_op>

圖 6解析結果是最有趣的部分。單擊底部窗格中的方法調用可建立一個層級結構,爲您顯示目前的方法——先是調用該方法的母方法,而後是從選定方法中調用的子方法。
相關文章
相關標籤/搜索