DDMS 使用方法


一、真機調試的兩個必備條件

(1)手機打開開發者模式並且運行USB調試

(2)PC上裝好手機對應的驅動

二、DDMS(DalvikDebugMonitorServer)四個主要窗口

Devices:當前電腦接入的android設備,及設備運行的進程,可以結束進程,設置程序為debug模式,截屏等。

LogCat:會打印系統運行過程中所有的日志信息

File Explorer:文件夾列表

data/app:第三方應用都會安裝目錄

data/system:預裝應用/系統應用安裝目錄

data/data:應用的私有目錄,只能被當前應用訪問,存儲數據量小且安全性要求高的數據系統每安裝一個新的應用程序,都會在此目錄創建該應用包名的文件,用來存放該應用的私有數據,當應用卸載時,該包名的文件夾也會被刪除

sdcard:外部存儲目錄,一般會鏈接指向到另一個目錄,用於存儲大數據量的數據,如視頻,圖片等

Emulator Contr:仿真器控制

三、博客里面找的比較好的相關文章

Android開發平台自帶一個調試工具, 叫Dalvik Debug Monitor Server(簡稱DDMS). 這個工具提供了端口傳輸服務, 在當前連接的調試設備上截圖, 設備的線程和堆(heap)信息, logcat信息, 進程狀態信息 和 廣播信息, 模擬目標機撥打電話和發送信息, 模擬位置數據等等.這篇文章將會適當的討論DDMS的特點, 但不會詳盡的介紹所有功能特點.

運行DDMS


DDMS被整合到Eclipse中, 並且被安裝到SDK目錄的tools文件夾中. 只要創建了模擬器或者連接上真實的設備, 都能使用DDMS進行應用的調試. 如果同時運行着模擬器和真實設備, DDMS則默認會連接模擬器工作.

  • 在Eclipse上, 點擊 Window > Open Perspective > Other... > DDMS. 即可啟動DDMS.
  • 或者運行命令行 ddms (or ./ddms on Mac/Linux) from the tools/ directory.

 

DDMS是如何調試的


在Android上每個應用程序都在自己的進程里運行, 而這些進程都運行在各自的虛擬機(VM)上. 虛擬機(VM)只會暴露唯一的一個接口給調試器來工作.當DDMS開始運行時, 它會連接到adb. 當設備連接上, adb和DDMS之間就會創建一個VM監聽服務, 該服務當模擬器或終端的VM開始工作時會通知DDMS.一旦VM運行, DDMS就會通過adb查找VM的進程ID(pid),  然后通過設備的adb后台進程(adbd) 創建和VM調試器的連接. 這時DDMS就可以使用通用的線路協議和VM對話.

DDMS會向設備的每個VM指定分配一個調試器端口. 比如, DDMS向第一個調試的VM指定分配8600端口, 下一個是8601,如此類推. 當調試器連接到這其中的一個接口, 所有通信將從關聯的VM轉向調試器. 調試器是唯一的, 它也只能連接到唯一的端口, 但DDMS可以控制調試器去對應哪個接口.

默認情況下, DDMS也會監聽另一個調試用的端口作為DDMS"基礎端口"(默認是8700). 這個基礎端口是端口的傳輸者, 可以接收來自任意調試端口的VM通信信息, 並將這些通信信息傳送給目標調試器. 這使得只將一個調試器依附在8700基礎端口, 就能調試設備上所有VM. 被傳送的通信信息將由當前DDMS界面上選擇的進程決定交給誰.(就是說, 在DDMS上, 用戶是可以選擇調試哪個應用程序的, 而無論調試設備中的哪個應用程序, 比如選擇了應用A, A的調試信息就會傳送到當前界面來, 選擇了B, 則得到的調試信息就是來自B的. 而調試A也好B也好, 使用的都是同一個調試器(debugger).)

下面的截圖展示了DDMS在Eclipse上的界面. 如果你通過命令行啟動DDMS, 界面會略有不同, 但大多數u功能還是一致的. 但要注意, 圖中高亮的,com.android.email, 是模擬器中正在運行的進程, 擁有8700和所分配的8606調試端口. 這表示DDMS當前正在轉發端口8606的信息到8700的靜態調試端口.

Figure 1. Screenshot of DDMS - DDMS的界面截圖

如果你不是使用Eclipse 或 ADT, 請前往原文點擊<Configuring your IDE to attach to the debugging port>獲取更多相關信息.

提示: 你在以下路徑設置DDMs的參數: Window > Preferences. 參數保存在 $HOME/.android/ddms.cfg.

了解Dalvik的一些調試問題

在Dalvik VM中調試應用程序, 也應該以同樣的方式在其他VM中工作. 無論如何, 當單步執行脫離同步代碼, "當前行"指針可能會跳到方法的最后一行去執行.

 

使用DDMS


運行DDMS

查看進程的堆(heap)使用情況

DDMS允許你查看進程使用了多少堆內存. 當應用執行時, 這對於跟蹤堆在一個確切時間點里的使用情況是很有用的.

如何查看進程的堆使用情況:

  1. 在設備的DDMS界面, 選擇你想查看堆信息的進程.
  2. 點擊 Update Heap 按鈕確認選擇該進程的堆信息.
  3. 在堆信息的標簽中, 點擊 Cause GC  去調用垃圾回收, 回收一次堆數據.當過程完成, 你將會看到已經被分配一組對象類型(object types)和內存信息. 你可以再次點擊 Cause GC  刷新這些數據.
  4. 點擊列表的對象類型 (object type) 查看對象和內存分配大小, 使用情況的柱狀圖.

 

跟蹤對象的內存分配情況

DDMS提供一個跟蹤對象內存分配以及查看這些類和線程分配的功能. 使你在應用上執行一些操作時能實時跟蹤得到內存的分配使用情況. 這些所得到的信息是相當有用的, 因為它能幫助我們評估內存使用情況和應用的性能情況.(比如執行某些操作時, 引用的對象過多, 尤其讀取了大量BITMAP圖片, 這時內存就會飆升, 當占用率超過一定時, 就會引起OOM. 因此實時知道應用的操作和內存使用的情況, 是很有意義的.)

如何跟蹤對象的內存分配:

  1. 在設備的DDMS界面中, 選擇你想要跟蹤的進程.
  2. 在點開的界面標簽中, 點擊 Start Tracking 按鈕開始跟蹤分配使用的情況. 在這時, 你在應用程序上的所有操作都將被跟蹤, 具體數據會如實反映到表中.
  3.  點擊 Start Tracking 后, 點擊 Get Allocations 查看被分配的對象列表.  你可以再次點擊 Get Allocations  刷新該信息列表.
  4. 點擊 Stop Tracking 按鈕可以停止跟蹤或者清除數據后點擊開始按鈕重新開始.
  5. 點擊列表中的某一行可以查看更多信息, 比如方法和第幾行內代碼如何分配了對象.

 

使用模擬器或設備的文件系統

DDMS提供文件系統的界面, 你可以在設備上瀏覽, 復制和刪除文件.這個功能在檢查應用程序是否創建了文件或者你想在設備內轉移文件時很有用.

如何使用模擬器或設備的文件系統:

  1. 在設備標簽中, 選擇你想要瀏覽文件系統的模擬器.
  2. 在文件系統中定位所需的文件, 點擊 Pull file 按鈕復制文件. 
  3. 點擊 Push file 按鈕粘貼文件. 

查看線程信息

在DDMS中線程標簽中可以查看選中的進程中當前運行的線程.

  1.  在設備DDMS界面, 選中你想查看線程的進程.
  2. 點擊 Update Threads 按鈕. 
  3. 在線程標簽中, 你能瀏覽選中進程的線程信息.

開始分析方法

分析方法是一種跟蹤特定度量方法的手段. 比如調用的數量, 執行時間, 和執行方法花費的時間. 如果你想獲取更多細節數據, 可以使用startMethodTracing()和 stopMethodTracing() 方法. 獲取更多關於生成跟蹤日志的信息, 可看官方原文的 Profiling and Debugging UIs .

在你開始使用DDMS分析方法前, 請注意以下的事項:

  • Android 2.1和低於2.1的當前設備必須插有SD卡, 並且你的應用程序必須擁有讀寫SD卡的權限.
  • Android 2.2或更高版本系統的設備可以不需要SD卡. 跟蹤日志文件會直接寫在當前調試的設備機器中.

如何開始分析方法:

  1. 在界面標簽中, 選擇你想要開始分析方法的進程.
  2. 點擊 Start Method Profiling 按鈕. 
  3. 在Android 4.4和更高版本的機器, 根據采樣間隔(sampling interval)選擇基於跟蹤分析(trace-based profiling)或采樣分析(sample-based profiling)中任意一個. 而在低於4.4的Android系統版本, 只支持基於跟蹤分析的方法.
  4. 伴隨着應用程序的啟動運行, 開始分析你所需的方法.
  5. 點擊 Stop Method Profiling 按鈕, DDMS會停止分析你的應用程序, 並且會自動打開界面並展示從點擊 Start Method Profiling 到點擊 Stop Method Profiling 跟蹤期間收集的數據.

 

Using the Network Traffic tool使用網絡通信工具

在Android 4.0, DDMS可以跟蹤應用程序發送的網絡請求, 從而獲知網絡的詳細使用情況. 而使用該工具, 你可以監聽你的應用程序怎么樣,什么時候傳遞數據,以便適當的優化相應代碼.你也可以在使用前根據提供 "tag" 給網絡套接字去區分不同的數據類型.

下面圖2, 是展示在DDMS棧區域的標簽截圖:


Figure 2. Network Usage tab.

通過監聽數據傳輸的頻率, 和在各個連接間傳輸數據的總量, 你可以確定並使應用程序在運行時更省電. 通常, 你應該尋找可以延遲發生請求的峰值方法,或者應該將后面的方法提前.(主要目的就是要提高網絡請求的效率.)

為了更好的確認傳遞數據的高峰, TrafficStats 這個API中, 我們可以使用 setThreadStatsTag() 方法去線程中的數據傳輸事件添加標簽, 通過tagSocket() 和 untagSocket() 方法手動標記(和不標記)單個socket套接字. 比如:

 

 TrafficStats.setThreadStatsTag(0xF00D);
 TrafficStats.tagSocket(outputSocket);
 // Transfer data using socket
 TrafficStats.untagSocket(outputSocket);

被包含在platform中的 HttpClient 和 URLConnection API方法會在內部基於源標記(這些標記可以使用 getThreadStatsTag() 方法確認 )自動標記套接字. 當回收連接池中連接, 這些API會正確地標記/不標記 套接字. 比如, setThreadStatsTag()方法設置活動標記(active tag)為 0xF00D.每個線程只能有一個活動標記(active tag). 這個值通過 getThreadStatsTag() 方法返回, 並被 HttpClient 用於標記套接字. 最后會調用clearThreadStatsTag() 方法清除標記. 

 

 TrafficStats.setThreadStatsTag(0xF00D);
 try {
 // Make network request using HttpClient.execute()
 } finally {
 TrafficStats.clearThreadStatsTag();
 }

Android 4.0支持標記套接字, 但實時數據只會在4.0.4或更高版本的Android設備上展示.

 

使用LogCat

 LogCat是DDMS中的一部分功能, 它會打印你在程序用使用 Log 類打印的各種信息(比如, Log.i, Log,e, Log.d 等等). 這些打印的信息方便我們知道應用程序運行時的一些情況, 比如一些拋出的異常信息. 如要獲取更多相關信息, 可前往官網閱讀 Reading and Writing Log Messages.   

 當你創建你記錄操作, 你能使用DDMS的LogCat 功能中以下的按鈕過濾具體的信息:

  • Verbose - 黑色, 打印任何信息.
  • Debug - 藍色, 只打印debug調試級別的信息.
  • Info - 綠色, 只打印info,Warn, Error的信息, Verbos和Debug的信息不會打印.
  • Warn - 橙色, 警告性信息.
  • Error - 紅色, 錯誤性信息.

你也可以創建你自己的通用的過濾器去分離更多的細節信息, 比如通過log的標記(tags)或者進程的id去過濾信息, 得到自己想要的log信息. 添加過濾器, 編輯過濾器, 和 刪除過濾器的按鈕可以讓你管理自己的過濾器.

 

模擬電話業務和位置

模擬器控制選項讓你可以模擬電話的語音和數據網絡狀態. 當你想測試應用程序在不同網絡環境下的健壯性時這是很有用的.

更換網絡狀態,網絡速度,網絡傳輸.(Changing network state, speed, and latency)

模擬器控制選項的電話狀態部分讓你可以更換不同的電話網絡狀態,網絡速度和網絡傳輸. 以下的幾點可以用於設置這些不同的變更, 一旦設置就會立刻生效:

  • 語音(Voice) - 未注冊的(unregistered), 本地(home), 漫游(roaming), 搜索中(searching), 拒絕(denied).
  • 數據(Data) - 未注冊的, 本地, 漫游 , 搜索中, 拒絕.
  • 速度(Speed) - Full, GSM, HSCSD, GPRS, EDGE, UMTS, HSDPA
  • 網絡傳輸(Latency) - GPRS, EDGE, UMTS

 

模擬電話或短息

模擬器控制選項的電話操作部分讓你可以模擬電話和短信服務. 這當你想測試你的應用程序在呼叫號碼和發送信息等通信時的健壯性是很有用的. 以下的操作可以選擇使用:

  • 語音 - 在 Incoming number 區域輸入呼叫號碼, 並點擊 Call  模擬一個呼叫給模擬器或其他電話設備. 點擊 Hang up 按鈕可中止呼叫操作. 
  • 短信 - 在 Incoming number 區域輸入目標號碼和短信內容, 點擊 Send 按鈕發送信息.      

 

設置電話的位置信息

如果你的應用程序需要用電話的位置信息, 你可以使用DDMS發送一個虛擬的位置信息給設備或模擬器. 這在不同移動距離就能測試應用程序在不同位置信息下的具體反應是很有用的.以下的幾點可以選擇使用:

  • 手動的(Manual) - 手動設置十進制或六十進制的經緯度.
  • GPX - GPS exChange files(GPS交換文件).
  • KML - Keyhole Markup Language file(一種標記語言, 基於XML語法和文件格式的文件,用來描述和保存地理信息, 多用於Google Earth).
定位策略 
接下來的部分會描述如何使用DDMS, 界面中不同的選項和窗口. Eclipse版本和命令行版本會令UI界面略有不同, 但功能還是一致的. 獲取關於運行DDMS的信息請看本文的前面部分, 獲取更多關於提供模擬定位信息數據的,請前往官網查看.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM