Android調試工具--DDMS

Android提供了調試工具被稱爲Dalvik Debug Monitor Server (DDMS),工作原理如下:

DDMS將搭建起IDE與測試終端(Emulator 或者connected device)的鏈接,它們應用各自獨立的端口監聽調試器的信息,DDMS可以實時監測到測試終端的連接情況。當有新的測試終端連接後,DDMS將捕捉到 終端的ID,並通過adb建立調試器,從而實現發送指令到測試終端的目的。
 
DDMS監聽第一個終端App進程的端口爲8600,APP進程將分配8601,如果有更多終端或者更多APP進程將按照這個順序依次類推。DDMS通過8700端口(”base port”)接收所有終端的指令。
下邊通過GUI詳細瞭解DDMS的一些功能
Devices
在GUI的左上角可以看到標籤爲”Devices”的面板,這裏可以查看到所有與DDMS連 接的終端的詳細信息,以及每個終端正在運行的APP進程,每個進程最右邊相對應的是與調試器鏈接的端口。因爲Android是基於Linux內核開發的操 作平臺,同時也保留了Linux中特有的進程ID,它介於進程名和端口號之間。
 
在面板的右上角有一排很重要的按鍵他們分別是Debug the selected process、Update Threads、Update Heap、Stop Process和ScreenShot。

Emulator Control
通過這個面板的一些功能可以非常容易的使測試終端模擬真實手機所具備的一些交互功能,比如:接聽電話,根據選項模擬各種不同網絡情況,模擬接受SMS消息和發送虛擬地址座標用於測試GPS功能等。

Telephony Status: 通過選項模擬語音質量以及信號連接模式。
www.moandroid.com
Telephony Actions: 模擬電話接聽和發送SMS到測試終端。Location Control: 模擬地理座標或者模擬動態的路線座標變化並顯示預設的地理標識,可以通過以下3種方式:
•Manual:手動爲終端發送二維經緯座標。

•GPX:通過GPX文件導入序列動態變化地理座標,從而模擬行進中GPS變化的數值。

•KML:通過KML文件導入獨特的地理標識,並以動態形式根據變化的地理座標顯示在測試終端。

Threads、Heap、File Exporler
mo-Android感受Android帶給我們的新體驗

這幾項,我們在其他開發工具中也經常使用,就在不此詳細說明了。通過File Exporler可以查看Android模擬器中的文件,可以很方便的導入/出文件。
Locate、Console

Locate:顯示輸出的調試信息,詳見Android下如何調試程序?; Console:是Android模擬器輸出的信息,加載程序等信息;
使用DDMS模擬發送短信,操作過程如下:
在Emulator Control\Telephony Actions 中輸入以下內容

單擊發送後,在Android模擬器中打開Messaging,看到下面的短信:

單擊新短信,詳細查看短信內容:

中文顯示爲亂碼,在未來的開發中,我們必須要注意中文字符的問題。

Android下如何調試程序?
常用調試程序的方法總結如下:

1. 使用Eclipse開發平臺調試;

這是使用Eclipse工具開發Android必須熟練掌握的調試技術,主要包括:設置斷點、查看變量值、查看當前堆棧等。打開Eclipse工具,單擊“Run”

2. 結合Android SDK調試;

在複雜的程序運行過程中,如何調試程序了?把程序運行過程的信息保存爲文件或者輸出到IDE中,這樣就可以知道程序是否是正常運行了。
在Android中可以使用Log類,Log類在android.util包中,可以使用它將運行過程的信息輸出到IDE中,直接查看程序運行的過程。Log 類提供了若干靜態方法 : Log.v(String tag, String msg); Log.d(String tag, String msg); Log.i(String tag, String msg); Log.w(String tag, String msg); Log.e(String tag, String msg);
分別對應 Verbose,Debug,Info,Warning,Error。 tag是一個標識,可以是任意字符串,通常可以使用類名+方法名,主要是用來在查看日誌時提供一個篩選條件。程序運行後,在show view中選擇Locat就可以直接看到輸出了。也可以在程序運行後,可以通過DDMS 查看程序的運行過程記錄,並可以通過String tag來過濾輸出的信息。
除了以上方法外,我們也可以把程序運行過程信息的輸出當作程序運行的一部分,比如使用Toast Notificatio將輸出信息顯示在界面中,當然這些只是些調試代碼,在發佈程序時需要去掉。
 

3. 使用JUnit調試;

JUnit可用來做完整的單元測試,對當前的部分代碼,測試其在每種“環境”下的運行結 果。 現簡要說下JUnit的幾個主要功能:

1) JUnit首先有管理測試用例的功能。修改了哪些代碼,這些代碼的修改會對哪些部分有影響,通過JUnit將這次的修改做個完整測試。這也就JUnit中所謂的TestSuite。

2.)如何定義需要測試的代碼?這也就是JUnit中所謂的TestCase,根據源代碼的測試需要定義每個TestCase,並將TestCase添加到相應的TestSuite方便管理。

3)如何定義測試的“環境”?在TestCase測試前會先調用“環境”配置,在測試中使用,當然也可以在直接測試用例中定義測試“環境”。

4) 最爲重要的部分,測試結果的檢測。對於每種正常、異常情況下的測試,運行結果是什麼、結果是否是我們預期的等都需要有個明確的定義,JUnit在這方面提供了強大的功能。

以上部分與我們平常使用IDE調試的過程是完全一樣的,只不過是增加了測試用例管理、測試結果檢測等功能,提高了單元的效率,保證了單元測試的完整性,明確了單元測試的目標。帶着以上4個問題,簡要舉例並分析如下: 源代碼如下:

public class SampleCalculator { public int add(int augend , int addend) {return augend + addend ;} public int subtration(int minuend , int subtrahend) {return minuend – subtrahend ;} }

測試代碼(TestCase)如下:

import junit.framework.TestCase; public class TestSample extends TestCase { public void testAdd()
{ SampleCalculator calculator = new SampleCalculator(); int result = calculator.add(50 , 20); assertEquals(70 , result); } public void testSubtration() { SampleCalculator calculator = new SampleCalculator(); int result = calculator.subtration(50 , 20); assertEquals(30 , result); } }

以上TestSample測試用例中就對SampleCalculator進行了完整的單元測試,並對測試結果做了預期說明。當然還需要將TestSample增加到TestCase中方便管理。

import junit.framework.Test; import junit.framework.TestSuite; public class TestAll{ public static Test suite(){ TestSuite suite = new TestSuite(”TestSuite Test”); suite.addTestSuite( TestSample.class); return suite; } }
以上就將TestSample增加到”TestSuite Test”中,將來在選擇測試用例的過程中只要選擇了TestSuite Test,TestSample就將加入當前測試中。如果將來SampleCalculator增加了其他功能,只需要在TestSample增加相應的 測試,就可以對TestSample進行完整單元測試。
看到這裏對上面4個問題,應該都有了大致的瞭解。最後需要說明的:對TestCase的管理,是完全界面化的,只需要按照JUnit的要求實現會自動產生UI界面,這個不必擔心,還需要下載JUint packeage,根據需求選擇自己需要的。
以上是在工作中總結的代碼調試的方法,並結合Android應用程序開發,爲將來深入開發Android應用程序打好堅實的基礎。
 

Android DDMS如何使用?

DDMS 爲我們提供例如:爲測試設備截屏,針對特定的進程查看正在運行的線程以及堆信息、Logcat、廣播狀態信息、模擬電話呼叫、接收SMS、虛擬地理座標等等。
如何啓動 DDMS
DDMS 工具存放在SDK – tools/路徑下,啓動DDMS方法如下:

1. 直接雙擊ddms.bat運行;

2. 在Eclipes調試程序的過程中啓動DDMS,在Eclipes中的界面如下:
 

選擇“Other”,界面如下:
 
雙擊DDMS就可以啓動了。
DDMS對Emulator和外接測試機有同等效用。如果系統檢測到它們(VM)同時運行,那麼DDMS將會默認指向 Emulator。以上2種啓動後的操作有些不一樣,建議分別嘗試下。
 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章