DDMS 使用方法
一、真機調(diào)試的兩個必備條件
(1)手機打開開發(fā)者模式并且運行USB調(diào)試
(2)PC上裝好手機對應的驅(qū)動
二、DDMS(DalvikDebugMonitorServer)四個主要窗口
Devices:當前電腦接入的android設備,及設備運行的進程,可以結束進程,設置程序為debug模式,截屏等。
LogCat:會打印系統(tǒng)運行過程中所有的日志信息
File Explorer:文件夾列表
data/app:第三方應用都會安裝目錄
data/system:預裝應用/系統(tǒng)應用安裝目錄
data/data:應用的私有目錄,只能被當前應用訪問,存儲數(shù)據(jù)量小且安全性要求高的數(shù)據(jù)系統(tǒng)每安裝一個新的應用程序,都會在此目錄創(chuàng)建該應用包名的文件,用來存放該應用的私有數(shù)據(jù),當應用卸載時,該包名的文件夾也會被刪除
sdcard:外部存儲目錄,一般會鏈接指向到另一個目錄,用于存儲大數(shù)據(jù)量的數(shù)據(jù),如視頻,圖片等
Emulator Contr:仿真器控制
三、博客里面找的比較好的相關文章
Android開發(fā)平臺自帶一個調(diào)試工具, 叫Dalvik Debug Monitor Server(簡稱DDMS). 這個工具提供了端口傳輸服務, 在當前連接的調(diào)試設備上截圖, 設備的線程和堆(heap)信息, logcat信息, 進程狀態(tài)信息 和 廣播信息, 模擬目標機撥打電話和發(fā)送信息, 模擬位置數(shù)據(jù)等等.這篇文章將會適當?shù)挠懻揇DMS的特點, 但不會詳盡的介紹所有功能特點.
運行DDMS
DDMS被整合到Eclipse中, 并且被安裝到SDK目錄的tools文件夾中. 只要創(chuàng)建了模擬器或者連接上真實的設備, 都能使用DDMS進行應用的調(diào)試. 如果同時運行著模擬器和真實設備, DDMS則默認會連接模擬器工作.
- 在Eclipse上, 點擊?Window > Open Perspective > Other... > DDMS. 即可啟動DDMS.
- 或者運行命令行 ddms?(or ./ddms on Mac/Linux) from the tools/?directory.
?
DDMS是如何調(diào)試的
在Android上每個應用程序都在自己的進程里運行, 而這些進程都運行在各自的虛擬機(VM)上. 虛擬機(VM)只會暴露唯一的一個接口給調(diào)試器來工作.當DDMS開始運行時, 它會連接到adb. 當設備連接上, adb和DDMS之間就會創(chuàng)建一個VM監(jiān)聽服務, 該服務當模擬器或終端的VM開始工作時會通知DDMS.一旦VM運行, DDMS就會通過adb查找VM的進程ID(pid), ?然后通過設備的adb后臺進程(adbd) 創(chuàng)建和VM調(diào)試器的連接. 這時DDMS就可以使用通用的線路協(xié)議和VM對話.
DDMS會向設備的每個VM指定分配一個調(diào)試器端口. 比如, DDMS向第一個調(diào)試的VM指定分配8600端口, 下一個是8601,如此類推. 當調(diào)試器連接到這其中的一個接口, 所有通信將從關聯(lián)的VM轉(zhuǎn)向調(diào)試器. 調(diào)試器是唯一的, 它也只能連接到唯一的端口, 但DDMS可以控制調(diào)試器去對應哪個接口.
默認情況下, DDMS也會監(jiān)聽另一個調(diào)試用的端口作為DDMS"基礎端口"(默認是8700). 這個基礎端口是端口的傳輸者, 可以接收來自任意調(diào)試端口的VM通信信息, 并將這些通信信息傳送給目標調(diào)試器. 這使得只將一個調(diào)試器依附在8700基礎端口, 就能調(diào)試設備上所有VM. 被傳送的通信信息將由當前DDMS界面上選擇的進程決定交給誰.(就是說, 在DDMS上, 用戶是可以選擇調(diào)試哪個應用程序的, 而無論調(diào)試設備中的哪個應用程序, 比如選擇了應用A, A的調(diào)試信息就會傳送到當前界面來, 選擇了B, 則得到的調(diào)試信息就是來自B的. 而調(diào)試A也好B也好, 使用的都是同一個調(diào)試器(debugger).)
下面的截圖展示了DDMS在Eclipse上的界面. 如果你通過命令行啟動DDMS, 界面會略有不同, 但大多數(shù)u功能還是一致的. 但要注意, 圖中高亮的,com.android.email, 是模擬器中正在運行的進程, 擁有8700和所分配的8606調(diào)試端口. 這表示DDMS當前正在轉(zhuǎn)發(fā)端口8606的信息到8700的靜態(tài)調(diào)試端口.
Figure 1.?Screenshot of DDMS - DDMS的界面截圖
如果你不是使用Eclipse 或 ADT, 請前往原文點擊<Configuring your IDE to attach to the debugging port>獲取更多相關信息.
提示: 你在以下路徑設置DDMs的參數(shù):?Window?>?Preferences. 參數(shù)保存在?$HOME/.android/ddms.cfg.
了解Dalvik的一些調(diào)試問題
在Dalvik VM中調(diào)試應用程序, 也應該以同樣的方式在其他VM中工作. 無論如何, 當單步執(zhí)行脫離同步代碼, "當前行"指針可能會跳到方法的最后一行去執(zhí)行.
?
使用DDMS
運行DDMS
查看進程的堆(heap)使用情況
DDMS允許你查看進程使用了多少堆內(nèi)存. 當應用執(zhí)行時, 這對于跟蹤堆在一個確切時間點里的使用情況是很有用的.
如何查看進程的堆使用情況:
?
跟蹤對象的內(nèi)存分配情況
DDMS提供一個跟蹤對象內(nèi)存分配以及查看這些類和線程分配的功能. 使你在應用上執(zhí)行一些操作時能實時跟蹤得到內(nèi)存的分配使用情況. 這些所得到的信息是相當有用的, 因為它能幫助我們評估內(nèi)存使用情況和應用的性能情況.(比如執(zhí)行某些操作時, 引用的對象過多, 尤其讀取了大量BITMAP圖片, 這時內(nèi)存就會飆升, 當占用率超過一定時, 就會引起OOM. 因此實時知道應用的操作和內(nèi)存使用的情況, 是很有意義的.)
如何跟蹤對象的內(nèi)存分配:
?
使用模擬器或設備的文件系統(tǒng)
DDMS提供文件系統(tǒng)的界面, 你可以在設備上瀏覽, 復制和刪除文件.這個功能在檢查應用程序是否創(chuàng)建了文件或者你想在設備內(nèi)轉(zhuǎn)移文件時很有用.
如何使用模擬器或設備的文件系統(tǒng):
查看線程信息
在DDMS中線程標簽中可以查看選中的進程中當前運行的線程.
開始分析方法
分析方法是一種跟蹤特定度量方法的手段. 比如調(diào)用的數(shù)量, 執(zhí)行時間, 和執(zhí)行方法花費的時間. 如果你想獲取更多細節(jié)數(shù)據(jù), 可以使用startMethodTracing()和?stopMethodTracing()?方法. 獲取更多關于生成跟蹤日志的信息, 可看官方原文的?Profiling and Debugging UIs?.
在你開始使用DDMS分析方法前, 請注意以下的事項:
- Android 2.1和低于2.1的當前設備必須插有SD卡, 并且你的應用程序必須擁有讀寫SD卡的權限.
- Android 2.2或更高版本系統(tǒng)的設備可以不需要SD卡. 跟蹤日志文件會直接寫在當前調(diào)試的設備機器中.
如何開始分析方法:
?
Using the Network Traffic tool使用網(wǎng)絡通信工具
在Android 4.0, DDMS可以跟蹤應用程序發(fā)送的網(wǎng)絡請求, 從而獲知網(wǎng)絡的詳細使用情況. 而使用該工具, 你可以監(jiān)聽你的應用程序怎么樣,什么時候傳遞數(shù)據(jù),以便適當?shù)膬?yōu)化相應代碼.你也可以在使用前根據(jù)提供 "tag" 給網(wǎng)絡套接字去區(qū)分不同的數(shù)據(jù)類型.
下面圖2, 是展示在DDMS棧區(qū)域的標簽截圖:
Figure 2.?Network Usage tab.
通過監(jiān)聽數(shù)據(jù)傳輸?shù)念l率, 和在各個連接間傳輸數(shù)據(jù)的總量, 你可以確定并使應用程序在運行時更省電. 通常, 你應該尋找可以延遲發(fā)生請求的峰值方法,或者應該將后面的方法提前.(主要目的就是要提高網(wǎng)絡請求的效率.)
為了更好的確認傳遞數(shù)據(jù)的高峰,?TrafficStats?這個API中, 我們可以使用?setThreadStatsTag()?方法去線程中的數(shù)據(jù)傳輸事件添加標簽, 通過tagSocket()?和?untagSocket()?方法手動標記(和不標記)單個socket套接字. 比如:
?
TrafficStats.setThreadStatsTag(0xF00D);TrafficStats.tagSocket(outputSocket);// Transfer data using socketTrafficStats.untagSocket(outputSocket);被包含在platform中的?HttpClient?和?URLConnection?API方法會在內(nèi)部基于源標記(這些標記可以使用?getThreadStatsTag()?方法確認?)自動標記套接字. 當回收連接池中連接, 這些API會正確地標記/不標記 套接字. 比如,?setThreadStatsTag()方法設置活動標記(active tag)為?0xF00D.每個線程只能有一個活動標記(active tag). 這個值通過?getThreadStatsTag()?方法返回, 并被?HttpClient?用于標記套接字. 最后會調(diào)用clearThreadStatsTag()?方法清除標記.?
?
TrafficStats.setThreadStatsTag(0xF00D);try {// Make network request using HttpClient.execute()} finally {TrafficStats.clearThreadStatsTag();}Android 4.0支持標記套接字, 但實時數(shù)據(jù)只會在4.0.4或更高版本的Android設備上展示.
?
使用LogCat
?LogCat是DDMS中的一部分功能, 它會打印你在程序用使用?Log?類打印的各種信息(比如, Log.i, Log,e, Log.d 等等). 這些打印的信息方便我們知道應用程序運行時的一些情況, 比如一些拋出的異常信息. 如要獲取更多相關信息, 可前往官網(wǎng)閱讀?Reading and Writing Log Messages.???
?當你創(chuàng)建你記錄操作, 你能使用DDMS的LogCat 功能中以下的按鈕過濾具體的信息:
- Verbose - 黑色, 打印任何信息.
- Debug - 藍色, 只打印debug調(diào)試級別的信息.
- Info - 綠色, 只打印info,Warn, Error的信息, Verbos和Debug的信息不會打印.
- Warn - 橙色, 警告性信息.
- Error - 紅色, 錯誤性信息.
你也可以創(chuàng)建你自己的通用的過濾器去分離更多的細節(jié)信息, 比如通過log的標記(tags)或者進程的id去過濾信息, 得到自己想要的log信息. 添加過濾器, 編輯過濾器, 和 刪除過濾器的按鈕可以讓你管理自己的過濾器.
?
模擬電話業(yè)務和位置
模擬器控制選項讓你可以模擬電話的語音和數(shù)據(jù)網(wǎng)絡狀態(tài). 當你想測試應用程序在不同網(wǎng)絡環(huán)境下的健壯性時這是很有用的.
更換網(wǎng)絡狀態(tài),網(wǎng)絡速度,網(wǎng)絡傳輸.(Changing network state, speed, and latency)
模擬器控制選項的電話狀態(tài)部分讓你可以更換不同的電話網(wǎng)絡狀態(tài),網(wǎng)絡速度和網(wǎng)絡傳輸. 以下的幾點可以用于設置這些不同的變更, 一旦設置就會立刻生效:
- 語音(Voice) - 未注冊的(unregistered), 本地(home), 漫游(roaming), 搜索中(searching), 拒絕(denied).
- 數(shù)據(jù)(Data) - 未注冊的, 本地, 漫游 , 搜索中, 拒絕.
- 速度(Speed) -?Full, GSM, HSCSD, GPRS, EDGE, UMTS, HSDPA
- 網(wǎng)絡傳輸(Latency) - GPRS, EDGE, UMTS
?
模擬電話或短息
模擬器控制選項的電話操作部分讓你可以模擬電話和短信服務. 這當你想測試你的應用程序在呼叫號碼和發(fā)送信息等通信時的健壯性是很有用的. 以下的操作可以選擇使用:
- 語音 - 在?Incoming number?區(qū)域輸入呼叫號碼, 并點擊?Call??模擬一個呼叫給模擬器或其他電話設備. 點擊?Hang?up?按鈕可中止呼叫操作.?
- 短信 - 在?Incoming number?區(qū)域輸入目標號碼和短信內(nèi)容, 點擊?Send?按鈕發(fā)送信息.? ? ??
?
設置電話的位置信息
如果你的應用程序需要用電話的位置信息, 你可以使用DDMS發(fā)送一個虛擬的位置信息給設備或模擬器. 這在不同移動距離就能測試應用程序在不同位置信息下的具體反應是很有用的.以下的幾點可以選擇使用:
- 手動的(Manual) -?手動設置十進制或六十進制的經(jīng)緯度.
- GPX - GPS exChange files(GPS交換文件).
- KML - Keyhole Markup Language file(一種標記語言,?基于XML語法和文件格式的文件,用來描述和保存地理信息, 多用于Google Earth).
轉(zhuǎn)載于:https://www.cnblogs.com/Ronaldo-HD/p/9287707.html
總結
- 上一篇: SystemUI Monkey测试原生代
- 下一篇: C语言计算圆柱的表面积 体积