Android-Using DDMS

來源:互聯網
上載者:User

標籤:

原文:http://developer.android.com/tools/debugging/ddms.html#how-ddms-works

 

Android提供了一個debug工具叫做:DDMS,它提供了連接埠轉寄服務,裝置截屏,裝置線程和堆資訊,日誌,進程,類比接打電話,類比收發簡訊,類比位置資料等功能。本文主要是對DDMS特性的簡單闡述,它不是對DDMS所有特性和功能的一個全面的挖掘。

運行DDMS

DDMS被整合到了Eclipse裡面,同時在SDK的tools目錄下面也有一份。DDMS同時支援模擬器和真實裝置。如果它們同時在運行,DDMS預設指向模擬器。

·        在Eclipse裡面:點擊-> Window > Open Perspective > Other... > DDMS

·        在命令列裡面:進入tools目錄,輸入:ddms(Linux/Mac平台上是./ddms)

DDMS和調試器是如何互動的

在android裡面,每一個application運行在單獨的進程中,每一個進程運行在自己的虛擬機器裡面(VM)。每一個虛擬機器會暴漏一個唯一的連接埠號碼供調試器來串連。

當DDMS啟動的時候,它會串連到adb。當一個裝置串連上來以後,在adb和DDMS之間會建立一個虛擬機器監控服務,當裝置上的虛擬機器啟動或者終止的時候,監控服務會通知DDMS。一旦一個虛擬機器運行起來,DDMS會通過adb檢索出虛擬機器的pid,然後通過裝置上的adbd後台進程開啟一個DDMS到虛擬機器調試器的串連。DDMS現在就可以使用定製化的無線協議和虛擬機器進行對話了

DDMS會給裝置上的每一個虛擬機器賦予一個調試連接埠。一般來說,DDMS會把8600給第一個調試器,下一個是8601,以此類推。當調試器串連到這些連接埠的時候,相關聯的虛擬機器上的所有的資料都會被轉寄到調試器上。你可以只把一個調試器給一個連接埠使用,但是DDMS可以處理多個調試器。

預設情況下,DDMS還會監聽另一個調試連接埠,叫做基連接埠(預設的連接埠號碼是8700)。基連接埠是一個連接埠轉寄站,它可以從任何一個調試連接埠接收虛擬機器的資料,然後轉到發到8700連接埠,然後調試裝置上的所有的虛擬機器。被轉寄的資料是由在DDMS的Device視圖裡面當前被選中的進程來決定的。

展示了eclipse裡面DDMS長的模樣。如果你是從命令列啟動的DDMS,模樣稍微有點不一樣,但是大部分的功能是一樣的。注意,高亮的進程com.android.email,它是運行在模擬器裡面的,同時被賦予了8700和8606的調試連接埠。這表明當前DDMS會把8606的資料轉寄到8700上。

 

Figure 1. Screenshot of DDMS

如果你不是使用Eclipse和ADT,請閱讀 Configuring your IDE to attach to thedebugging port,來綁定你的調試器。

Tip:你可以通過File > Preferences設定很多個DDMS的preference。Preference被儲存到$HOME/.android/ddms.cfg.

Dalvik的調試的問題

在Dalvik虛擬機器中調試和在其他的虛擬機器調試基本是一樣的,但是,當單步跳出同步代碼塊的時候,滑鼠的當前行會跳到方法的最後一行。

使用DDMS

下面的章節介紹如何使用DDMS,還有DDMD介面上各個分頁和面板。Eclipse的版本和命令列的版本在UI上會有細微的差別,但是功能是一樣的。如何運行DDMS請參考本文前面的章節。

查看進程佔用的heap記憶體

DDMS允許查看進程佔用了多少堆記憶體,這對跟蹤application執行過程中的某個時間點上堆的使用方式非常有用。

查看一個進程的堆的使用方式:

1.   在Devices頁面,選中你要查看堆資訊的進程。

2.   單擊Update Heap 按鈕,允許查看進程的堆資訊。

3.   在Heap頁面,單擊Cause GC 觸發記憶體回收,這會手機堆資料資訊。當操作完成以後,你會看到很多資料類型和他們所佔用的記憶體。你可以再次單擊 CauseGC 來重新整理資料。

4.   在一個資料類型上單擊,會出現一個柱狀圖,它展示了對象的數量和以位元組計數分配的記憶體。

跟蹤對象的記憶體配置

DDMS提供了一種跟蹤對象記憶體配置的特性,可以看到是哪些類和線程正在指派至。這就允許你即時的跟蹤是哪些對象正在被分配,當你的應用作某些操作的時候。這對評估那些可能會影響應用效能的記憶體的使用非常有用。

跟蹤對象的記憶體配置:

1.   在Devices頁面,選中你要查看堆資訊的進程。

2.   在AllocationTracker頁面,點擊Start Tracking按鈕,開始跟蹤。這時,應用裡面的任何的動作都會被跟蹤下來。

3.   點擊Get Allocations查看自從你點擊了Start Tracking以後應用程式指派的對象的列表。你可以再次點擊Get Allocations來追加分配的新對象。

4.   點擊Stop Tracking按鈕按鈕可以停止跟蹤或者是清除資料然後重新開始。

5.   點擊列表裡面的某一行資料,可以查看更細節的資訊,比如:指派至的代碼的方法和行號等。

使用模擬器或者是裝置的檔案系統

DDMS提供了一個檔案瀏覽器頁面,允許你查看、複製、刪除裝置上的檔案。檢查你應用建立的檔案或者你想在裝置上轉移檔案的時候,這個特性會非常有用。

使用模擬器或者是裝置的檔案系統

1.    在Devices頁面,選中你要查看堆資訊的進程。

2.   從裝置中拷貝檔案,在檔案瀏覽器中定位到檔案,點擊Pull file按鈕。

3.   把檔案拷貝到裝置,在檔案瀏覽器頁面點擊 Pushfile 按鈕。

檢查線程資訊

DDMS裡面的Threads頁面展示了某個選中的進程下當前啟動並執行線程。

1.   在Devices頁面,選中你要查看堆資訊的進程。

2.   點擊Update Threads 按鈕.

3.   在Threads頁面,就可以看到選中的進程的線程資訊。

開始方法分析

方法分析是一種跟蹤方法的某些資訊的方式,比如說:調用次數,執行時間。關於在哪裡收集分析資料,如果你想要擷取更細粒度的控制,可以使用startMethodTracing() 和stopMethodTracing()。關於如何產生追蹤記錄檔,請參考:Profiling and Debugging UIs.

在DDMS裡面開始方法分析之前,要知道有如下的一些限制:

·        Android2.1和更早期的版本的裝置必須得有SD卡,你的應用必須得有寫SD卡的許可權。

·        Android2.2和高版本的裝置不需要SD卡,追蹤記錄檔直接發送到你的開發機上。

開始方法分析:

1.   在Devices頁面,選中你要查看堆資訊的進程。

2.   點擊Start MethodProfiling 按鈕

3.   跟應用進行互動,啟動你想要分析的方法。

點擊Stop MethodProfiling按鈕。DDMS停止分析你的應用,然後會開啟 含有在你點擊Start Method Profiling 和Stop MethodProfiling之間收集到的方法分析資訊的Traceview 視圖。

使用網路流量工具

在Android 4.0裡面,DDMS包含了一個詳細的網路使用方式的頁面,這使得監控應用發出的網路請求變為可能。使用這個工具,你可以監控你的應用是在什麼時候如何傳遞資料,可以更好的最佳化底層的代碼。你也可以在使用之前,給網路的socket應用一個“tag”來區分不同的流量的類型,

These tags are shownin a stack area chart in DDMS, as shown in figure 2:

 

Figure 2. Network Usage tab.

By monitoringthe frequency of your data transfers, and the amount of data transferred duringeach connection, you can identify areas of your application that can be mademore battery-efficient. Generally, you should look for short spikes that can bedelayed, or that should cause a later transfer to be pre-empted.

To betteridentify the cause of transfer spikes, the TrafficStats API allows you to tag the datatransfers occurring within a thread using setThreadStatsTag(), followed by manually tagging (anduntagging) individual sockets using tagSocket()and untagSocket(). For example:

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

Alternatively,the Apache HttpClient and URLConnection APIs included in the platformautomatically tag sockets internally based on the active tag (as identifiedby getThreadStatsTag()). These APIs correctly tag/untag socketswhen recycled through keep-alive pools. In the following example, setThreadStatsTag() sets the active tag to be 0xF00D. There can only be one active tag perthread. That is the value that will be returned by getThreadStatsTag() and thus used byHttpClient to tagsockets. The finally statementinvokes clearThreadStatsTag() to clear the tag.

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

Socket taggingis supported in Android 4.0, but real-time stats will only be displayed ondevices running Android 4.0.3 or higher.

使用LogCat

LogCat被整合到了DDMS裡面,他會列印出你使用Log類列印的訊息和其他的系統的訊息,比如:當發生異常的時候的堆棧元素。更多關於如何把日誌輸出到LogCat,請參考Reading and Writing Log Messages.

當你設定好了你的日誌,你可以使用DDMS的LogCat特性來過濾特定的訊息,使用以下按鈕:

·        Verbose

·        Debug

·        Info

·        Warn

·        Error

你也可以設定你自己的過濾器定製過濾更多地細節,比如用log的tag來過濾日誌,或者是產生日誌的pid來過濾日誌。add filter,edit filter,和delete filter按鈕允許你管理這些定製的過濾器。

類比手機操作和位置

Emulator control頁面允許你類比手機的語音和網路狀態。當你想測試應用在不同網路環境下的健壯性的時候會非常的有用。

改變網路的狀態、速度、延遲

Emulatorcontrols頁面的Telephony Status地區允許你改變行動電話通訊的狀態、速度、延遲。可以應用以下選項,一旦設定,立馬生效:

·        Voice - unregistered, home, roaming, searching, denied

·        Data - unregistered, home, roaming, searching, denied

·        Speed - Full, GSM, HSCSD, GPRS, EDGE, UMTS, HSDPA

·        Latency - GPRS, EDGE, UMTS

類比打電話或者是發簡訊

Emulatorcontrols頁面的Telephony Actions地區可以類比打電話和發簡訊。當你想測試應用收到來電或者簡訊的時候的健壯性的時候,會非常的有用。你可以做以下的動作:

·        語音-在Incoming number域輸入一個號碼,點後點擊Call給模擬器或者是手機打電話。點擊Hang up 按鈕掛斷。

·        SMS-在 Incomingnumber 域輸入一個號碼,在Message域輸入簡訊,點擊 Send按鈕,傳送簡訊。

設定手機的位置資訊

如果你的應用取決於手機所在的位置,你可以讓DDMS給你的裝置或者是模擬器發送一個假的位置。當你想測試應用的基於位置的特性的時候,可以不用物理的移動位置,這將會非常的有用。支援以下地理資料類型:

·        Manual - set the location by manually specifying decimalor sexagesimal longitude and latitude values.

·        GPX - GPS eXchange file

·        KML - Keyhole Markup Language file

·        純手工-手動設定浮點數的經緯度

·        GPX-GPS eXchange檔案

·        KML-KML檔案

For more information about providingmock location data, see Location Strategies.

關於提供mock位置資料的更多資訊,可以參考: Location Strategies.

 

注意:

 

DDMS產生的記憶體dump檔案不能直接用MAT工具開啟,會提示檔案格式不支援。需要轉化:

(1)運行cmd,cd到D:\tools\android-sdk\tools目錄下

(2)輸入命令hprof-conv  xxxx.hprof  yyyy.hprof 

 xxxx.hprof 為原檔案,yyyy.hprof 為轉化過後的檔案(同樣產生在D:\tools\android-sdk\tools目錄下)

(3)ok, .hprof檔案轉化完成

參考:http://blog.csdn.net/jingwen3699/article/details/7977275

Android-Using DDMS

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.