一.查看進程的堆棧使用情況 -- Heap
1.選中你要查看的進程;
2.點擊“ Update Heap”按鈕開啟該進程的該項功能,如果單獨打開ddms工具,按鈕名為“Show heap updates”;
3.點擊“Cause GC”按鈕來進行垃圾回收,當操作完成后,您會看到一組對象類型和為每種類型已分配的內存;
4.點擊列表中的一個對象類型,為該種特定內存大小的對象分配的數量。
二.跟蹤對象的內存分配 -- Allocation Tracker
1.在“設備”選項卡中,選擇要啟用的分配跟蹤的進程;
2.在“分配跟蹤”選項卡上,單擊“開始跟蹤”按鈕開始分配跟蹤,從這一時開始,你的應用程序所做的任何事將被跟蹤。
3.單擊”Get Allocations“,可以看到一個列表,當要繼續跟蹤時,可以重新點擊”開始跟蹤“按鈕。
4.要停止跟蹤或清除數據,並重新開始,請單擊“停止跟蹤”按鈕。
5.點擊列表中某一項,可以看到更多的信息,該條目的方法,所屬對象以及代碼行號等詳細信息。
三.操作仿真器或設備的文件系統 -- File Explorer
1.在“設備”選項卡中,選擇您想要查看的文件系統的仿真器。
2.從設備復制文件,在文件瀏覽器中找到該文件,然后單擊“Pull file”按鈕。
3.要復制一個文件到設備上的文件資源管理器“Push file ”按鈕。
四.檢查線程信息 -- Threads
1.在“設備”選項卡中,選擇進程;
2.單擊”Update Threads“按鈕.單獨打開ddms,顯示”show thread update“。
3.在“Threads”選項卡上,您可以查看所選進程的線程信息。
五.方法分析
方法分析的方式來追蹤特定的度量方法,如調用次數,執行時間,執行的方法花費的時間。
在您開始在DDMS的方法分析,注意以下限制:
Android 1.5的設備不被支持。
Android 2.1和更早版本的設備都必須有一個SD卡和你的應用程序必須寫入SD卡的權限。
Android 2.2及更高版本的設備並不需要一個SD卡。跟蹤日志文件直接傳輸到你的開發機。
1.在“設備”選項卡中,選擇進程。
2.點擊Start Method Profiling按鈕。
3.與應用程序交互,啟動你要分析的方法。
4.單擊“停止”的方法剖析按鈕。 DDMS停止分析您的應用程序,打開Traceview的方法收集的分析信息。
六.使用的網絡流量工具 -- Network Statistics
在Android 4.0, DDMS 具備監控詳細的網絡使用情況的功能,使得它可以跟蹤您的應用程序的網絡請求。使用這個工具,你可以監視應用程序的數據傳輸,並適當優化的底層代碼。
七.使用LogCat
當你設置你的日志,你可以用logcat的功能, DDMS過濾某些信息通過下面的按鈕:
詳細
調試
信息
警告
錯誤
您還可以設置自己的自定義過濾器指定更多的細節,如過濾消息的日志標簽或生成日志消息的進程ID 。
八.模擬電話業務和位置 -- Emulator Control
”Emulator control “可以模擬手機的語音和數據網絡的狀態。這是非常有用的,當你想測試你的應用程序在不同網絡環境下的魯棒性。可以設置下面的選項:
- Voice - unregistered, home, roaming, searching, denied
- Data - unregistered, home, roaming, searching, denied
- Speed - Full, GSM, HSCSD, GPRS, EDGE, UMTS, HSDPA
- Latency - GPRS, EDGE, UMTS
聲音 - 在“來電號碼”字段中輸入一個數字,然后點擊呼叫,模擬呼叫發送到模擬器或手機。點擊掛斷鍵終止通話。
短信 - 來電號碼字段和在消息中:“字段中輸入一個數字,然后點擊”發送“按鈕發送消息。
十.設置手機地理位置
如果您的應用程序依賴於位置的手機,你可以有的DDMS送您的設備或AVD一個模擬的位置。這是非常有用的,如果你想測試你的應用程序的特定位置的功能,而不必實際移動的不同方面。您可以使用下面的地理位置數據類型:
手動設置位置 - 通過手動指定十進制或六十進制的經度和緯度值。
GPX - GPS交換文件
KML - Keyhole標記語言文件
簡單介紹如何應用DDMS協助開發Android Apps
DDMS 的全稱是Dalvik Debug Monitor Service,它為我們提供例如:為測試設備截屏,針對特定的進程查看正在運行的線程以及堆信息、Logcat、廣播狀態信息、模擬電話呼叫、接收SMS、虛擬地理坐標等等。
DDMS 工具存放在SDK -tools/路徑下,可以直接雙擊ddms.bat運行,也可以通過terminal/console(CLS)輸入ddms(在Mac或者Linux系統中輸入./ddms)啟動程序。DDMS對Emulator和外接測試機有同等效用。如果系統檢測到它們(VM)同時運行,那么DDMS將會默認指向Emulator。
DDMS 的工作原理
DDMS將搭建起IDE與測試終端(Emulator 或者connecteddevice)的鏈接,它們應用各自獨立的端口監聽調試器的信息,DDMS可以實時監測到測試終端的連接情況。當有新的測試終端連接后,DDMS將捕捉到終端的ID,並通過adb建立調試器,從而實現發送指令到測試終端的目的。
DDMS監聽第一個終端App進程的端口為8600,APP進程將分配8601,如果有更多終端或者更多APP進程將按照這個順序依次類推。DDMS通過8700端口(”base port”)接收所有終端的指令。如果想了解更多資料 Configuring your IDE to attach to port 8700 for debugging。
通過File > Preferences查看DDMS相關設置,所有的參數設定將保存在 “$HOME/.ddmsrc”
下邊通過GUI簡單了解DDMS的一些功能:
Devices
在GUI的左上角可以看到標簽為”Devices”的面板,這里可以查看到所有與DDMS連接的終端的詳細信息,以及每個終端正在運行的APP進程,每個進程最右邊相對應的是與調試器鏈接的端口。因為Android是基於Linux內核開發的操作平台,同時也保留了Linux中特有的進程ID,它介於進程名和端口號之間。
在面板的右上角有一排很重要的按鍵他們分別是Debug the selected process、Update Threads、Update Heap、Stop Process和ScreenShot。
Debug Selected Process:用於表現被選擇進程與調試器連接狀態,如果進程前帶有綠色表示,那么說明該進程的工程文件在當前Workspace中處於打開狀態,並允許我們開啟調試器監聽進程運行情況。
Update Threads: 用於查看當前進程所包含的線程。當選中任意進程后,點擊這個命令可以在右側面板的Threads標簽里看到詳細的線程運行情況,同時在被選中的進程名稱后邊會出現顯示線程信息標識。
Update Heap: 與上一個Update Threads類似,只不過這個命令用於查看當前進程堆棧內存的使用情況。
Stop Process: 這個應該非常容易理解,終止當前進程。
ScreenShot: 截取當前測試終端桌面。
Emulator Control
通過這個面板的一些功能可以非常容易的使測試終端模擬真實手機所具備的一些交互功能,比如:接聽電話,根據選項模擬各種不同網絡情況,模擬接受SMS消息和發送虛擬地址坐標用於測試GPS功能等。
- Telephony Status: 通過選項模擬語音質量以及信號連接模式。
- Telephony Actions: 模擬電話接聽和發送SMS到測試終端。
- Location Control: 模擬地理坐標或者模擬動態的路線坐標變化並顯示預設的地理標識。
- Manually send individual longitude/latitude coordinates to the device : 手動為終端發送二維經緯坐標。
- Use a GPX file describing a route for playback to the device : 通過GPX文件導入序列動態變化地理坐標,從而模擬行進中GPS變化的數值。
- Use a KML file describing individual placemarks for sequenced playback to the device : 通過KML文件導入獨特的地理標識,並以動態形式根據變化的地理坐標顯示在測試終端。
Logcat
現實所有針對測試終端操作的日志記錄,可以很明顯的區分開警告信息和錯誤信息。
利用DDMS從模擬器上導入導出文件學習內容: 你將學會如何使用Eclipse的DDMS-View 從模擬器上導入導出文件 . 描述:
依照下圖打開 DDMS-View . (如果你上面沒有按鈕A, 那么請按照 B所示方式打開).
打開文件瀏覽器,使用右上角的導入導出按鈕來操作目標文件..
另外一種導入方法:
運行模擬器,在命令行模式下到 “…/android_sdk/tools”目錄下,使用下面的命令
adb push <local_source> <emulator_destination>
Android截圖方法之DDMS篇提起Android截圖,這里雖然Google在Android操作系統中提供了幀緩存的權限許可,但是沒有Root權限仍然無法很好的截圖,現在安裝好Android SDK和Eclipse,在DDMS中可以看到連接Devices標簽中找到可用的唯一個圖標,如圖下圖所示:
最終在Device Screen Capture窗口中就是Android屏幕截圖效果,直接單擊Save按鈕即可保存圖片為PNG格式。如圖
不使用DDMS打電話
通過gsm call命令可以像Android模擬器打電話,除了在EclipseADT的DDMS中通過按鈕Dial外,還可以通過DDMS外殼調用gsm call命令直接撥打,我們首先需要啟動AndroidEmulator,然后在cmd環境下執行telnet localhost 5554 下面就可以向Android模擬器撥號,參數為gsmcall < phoneNum> ,比如給10086打電話為gsm call +10086 簡單介紹如何應用DDMS協助開發Android Apps
DDMS 的全稱是Dalvik Debug Monitor Service,它為我們提供例如:為測試設備截屏,針對特定的進程查看正在運行的線程以及堆信息、Logcat、廣播狀態信息、模擬電話呼叫、接收SMS、虛擬地理坐標等等。
DDMS 工具存放在SDK -tools/路徑下,可以直接雙擊ddms.bat運行,也可以通過terminal/console(CLS)輸入ddms(在Mac或者Linux系統中輸入./ddms)啟動程序。DDMS對Emulator和外接測試機有同等效用。如果系統檢測到它們(VM)同時運行,那么DDMS將會默認指向Emulator。
DDMS 的工作原理
DDMS將搭建起IDE與測試終端(Emulator 或者connecteddevice)的鏈接,它們應用各自獨立的端口監聽調試器的信息,DDMS可以實時監測到測試終端的連接情況。當有新的測試終端連接后,DDMS將捕捉到終端的ID,並通過adb建立調試器,從而實現發送指令到測試終端的目的。
DDMS監聽第一個終端App進程的端口為8600,APP進程將分配8601,如果有更多終端或者更多APP進程將按照這個順序依次類推。DDMS通過8700端口(”base port”)接收所有終端的指令。如果想了解更多資料 Configuring your IDE to attach to port 8700 for debugging。
通過File > Preferences查看DDMS相關設置,所有的參數設定將保存在 “$HOME/.ddmsrc”
下邊通過GUI簡單了解DDMS的一些功能:
Devices
在GUI的左上角可以看到標簽為”Devices”的面板,這里可以查看到所有與DDMS連接的終端的詳細信息,以及每個終端正在運行的APP進程,每個進程最右邊相對應的是與調試器鏈接的端口。因為Android是基於Linux內核開發的操作平台,同時也保留了Linux中特有的進程ID,它介於進程名和端口號之間。
在面板的右上角有一排很重要的按鍵他們分別是Debug the selected process、Update Threads、Update Heap、Stop Process和ScreenShot。
Debug Selected Process:用於表現被選擇進程與調試器連接狀態,如果進程前帶有綠色表示,那么說明該進程的工程文件在當前Workspace中處於打開狀態,並允許我們開啟調試器監聽進程運行情況。
Update Threads: 用於查看當前進程所包含的線程。當選中任意進程后,點擊這個命令可以在右側面板的Threads標簽里看到詳細的線程運行情況,同時在被選中的進程名稱后邊會出現顯示線程信息標識。
Update Heap: 與上一個Update Threads類似,只不過這個命令用於查看當前進程堆棧內存的使用情況。
Stop Process: 這個應該非常容易理解,終止當前進程。
ScreenShot: 截取當前測試終端桌面。
Emulator Control
通過這個面板的一些功能可以非常容易的使測試終端模擬真實手機所具備的一些交互功能,比如:接聽電話,根據選項模擬各種不同網絡情況,模擬接受SMS消息和發送虛擬地址坐標用於測試GPS功能等。
- Telephony Status: 通過選項模擬語音質量以及信號連接模式。
- Telephony Actions: 模擬電話接聽和發送SMS到測試終端。
- Location Control: 模擬地理坐標或者模擬動態的路線坐標變化並顯示預設的地理標識。
- Manually send individual longitude/latitude coordinates to the device : 手動為終端發送二維經緯坐標。
- Use a GPX file describing a route for playback to the device : 通過GPX文件導入序列動態變化地理坐標,從而模擬行進中GPS變化的數值。
- Use a KML file describing individual placemarks for sequenced playback to the device : 通過KML文件導入獨特的地理標識,並以動態形式根據變化的地理坐標顯示在測試終端。
Logcat
現實所有針對測試終端操作的日志記錄,可以很明顯的區分開警告信息和錯誤信息。
利用DDMS從模擬器上導入導出文件學習內容: 你將學會如何使用Eclipse的DDMS-View 從模擬器上導入導出文件 . 描述:
依照下圖打開 DDMS-View . (如果你上面沒有按鈕A, 那么請按照 B所示方式打開).
打開文件瀏覽器,使用右上角的導入導出按鈕來操作目標文件..
另外一種導入方法:
運行模擬器,在命令行模式下到 “…/android_sdk/tools”目錄下,使用下面的命令
adb push <local_source> <emulator_destination>
Android截圖方法之DDMS篇提起Android截圖,這里雖然Google在Android操作系統中提供了幀緩存的權限許可,但是沒有Root權限仍然無法很好的截圖,現在安裝好Android SDK和Eclipse,在DDMS中可以看到連接Devices標簽中找到可用的唯一個圖標,如圖下圖所示:
最終在Device Screen Capture窗口中就是Android屏幕截圖效果,直接單擊Save按鈕即可保存圖片為PNG格式。如圖
不使用DDMS打電話
通過gsm call命令可以像Android模擬器打電話,除了在EclipseADT的DDMS中通過按鈕Dial外,還可以通過DDMS外殼調用gsm call命令直接撥打,我們首先需要啟動AndroidEmulator,然后在cmd環境下執行telnet localhost 5554 下面就可以向Android模擬器撥號,參數為gsmcall < phoneNum> ,比如給10086打電話為gsm call +10086
====================================================================android調試工具DDMS的使用詳解=======================================================================
具體可見http://developer.android.com/tools/debugging/ddms.html。 DDMS為IDE和emultor、真正的android設備架起來了一座橋梁。開發人員可以通過DDMS看到目標機器上運行的進程/現成狀態,可以 android的屏幕到開發機上,可以看進程的heap信息,可以查看logcat信息,可以查看進程分配內存情況,可以像目標機發送短信以及打電話,可 以像android開發發送地理位置信息。可以像gdb一樣attach某一個進程調試。 SDK tools目錄下提供了ddms的完整版,直接運行即可。下面以Eclipse的DDMS perspective為例簡單介紹DDMS的功能。
跟debug,java的perspective一樣,安裝好adt后會有一個DDMS得perspective,打開即可。
打開后的窗口為,
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,DDMS在IDE與設備或模擬器之間的起着中間人的角色。
3,DDMS啟動時會與ADB之間建立一個device monitoring service用於監控設備。當設備斷開或鏈接時,這個service就會通知DDMS。
4,當一個設備鏈接上時,DDSM和ADB之間又會建立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實例在運行。
五,右邊面板1,info
這里顯示關於選中的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里輸入經度緯度發送到模擬器,也可以通過 GPX和KML文件。
六,其他1,File 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 ,停止一個虛擬機。