概述
Dalvik调试监视服务(Dalvik Debug Monitor Service,DDMS)是由Android软件开发包(Software Development Kit,SDK)提供的调试工具。开发人员可以使用DDMS提供的窗口来监视模拟器或真实设备的调试,包括对文件和进程的管理等。它是几个工具的完美融合:任务管理器(Task Manager)、文件浏览器(File Explorer)、模拟控制台(Emulator console)和日志控制台(Logging console)。如果你需要获取其完整的特性说明,可以查看Adroid SDK提供的DDMS文档。
独立或结合Eclipse使用DDMS
如果你使用的是安装了Android开发工具插件(Android Development Tools Plug-In)的Eclipse集成开发环境(Inregrated Development Environment,IDE),那么DDMS工具已经紧密地融合到了你的开发环境中。通过DDMS视图,你可以浏览任何一个在开发机上运行的模拟器实例,并且能够查看通过USB连接的Android设备。
如果你没有使用Eclipse,那么DDMS也可以在单独的进程中运行,它位于/Tools目录下。在这种情况下,DDMS将运行在自己的进程中。
Tip
在同一时间只允许运行一个DDMS实例。其他运行的DDMS会被忽略。另外,有资料指出DDMS运行在Eclipse视图中远比其独立运行要稳定。
独立使用DDMS
 在ftp服务器路径下载文件jdk-1_5_0_21-windows-i586-p.exe,安装好文件后,java虚拟机的环境就搭好了。然后,再下载ddms0.1.zip,解压该文件后,运行文件中的ddms.bat 。即可以打开Dalvik调试监视服务程序。
 
该版本的DDMS是经过了一部分汉化的,可以用来调试一下程序。以下是各个功能模块的详细说明。请见如下。
熟悉DDMS的关键特性
无论你是在Eclipse中使用DDMS,还是单独使用它,都需要注意以下几个关键特性。
在左上角,你将能够找到处于运行状态的模拟器和连接的设备。
文件浏览器允许你查看模拟器和设备上的文件(包括应用程序文件、目录和数据库),并且可以进行提取或添加。
LogCat窗口能够让你监视Android日志控制台(LogCat)。在这里将显示Log.i()、Log.e()和其他Log方法调用产生的消息。
可以查看每一个进程(堆和线程更新),也可以查看每一个线程,还可以终止进程。你可以触发进程上的“垃圾回收(garbage collection)”,并随后查看应用程序所使用的堆。
你可以使用Screem Capture(屏幕捕捉)按钮来捕捉模拟器和设备上的屏幕画面。
你随时可以使用模拟控制台,比如发送GPS信息、模拟来电或SMS到达等。
某些功能只有在Eclipse DDMS视图下可用,比如你可以在模拟器或设备的某个进程上单击,然后点击那只绿色的小虫子图标( )为其关联(attach)一个调试器,这样就可以在提供了源码的情况下调试这个进程了。
使用进程
DDMS非常有用的一个特性在于可以同进程打交道。每一个Android应用程序都是用其自己的用户id运行在操作系统的单独的VM(虚拟机)中。
通过DDMS左侧的面板,你可以查看所在设备上运行的VM实例,每一个均以其包名称作为标示。
你可以:
在Eclipse中关联(attach)并调试应用程序。
监视进程。
监视堆。
终止进程。
强制进行垃圾回收(Garbage Collection,GC)。
向Android应用程序关联调试器
 虽然大多数情况下你会使用Eclipse调试参数来运行并调试应用程序,但你也可以使用DDMS来选择任何需要调试的应用程序,并直接关联和调试它。
 要为一个进程关联调试器,需要在Eclipse工作区中打开对应包的源代码。然后执行以下步骤进行调试。
在模拟器或设备上,确认你想要调试的应用程序处于运行状态。
在DDMS中,找到这个应用程序的包,并且点击它使其高亮。
单击绿色的小虫图标( )开始调试。
在必要时切换到Eclipse的调试视图,像通常一样进行调试。
监视Android应用程序的线程活动
 你可以使用DDMS来监视没一个Android应用程序的线程活动。步骤如下:
在模拟器或设备上,确认你想要监视的应用程序处于运行状态。
在DDMS中,找到应用程序的包,并且点击它使其高亮。
单击带有3个箭头的小图标( )以显示应用程序的线程。它们将出现在Thread标签的右侧。默认情况下,这里显示的数据每4s进行一次更新。
在Thread标签中,你可以选择某个特定的线程并且按下Refresh按钮来深入查看这个线程。其中包含的类将会显示在下方区域。
在Android应用程序中触发垃圾回收(GC)
 你可以使用DDMS来强制进行垃圾回收(Garbage Collection,GC),步骤如下:
在模拟器或设备上,确认你想要进行GC的应用程序处于运行状态。
在DDMS中,找到这个应用程序的包,并且点击它使其高亮。
展开下拉菜单(倒三角 )并且选择Cause GC。也可以在Heap标签中执行这一操作。
监视Adroid应用程序的堆活动
 你可以使用DDMS来监视每一个Android应用程序的堆统计数据。在每次GC后堆的统计数据将进行更新。步骤如下:
在模拟器或设备上,确认你想要监视的应用程序处于运行状态。
在DDMS中,找到这个应用程序的包,并且点击它使其高亮。
单击绿色的圆筒图标( )以显示该应用程序的堆信息。统计数据将出现在Heap标签的右侧。这一数据将在每次GC后予以更新。你也可以通过单击Heap标签中的Cause GC按钮来触发一个GC操作。
在Heap标签中,你可以选择特定类型的对象。它的使用情况图表将显示在Heap标签的底部。
终止Android进程
 你可以使用DDMS来终止一个Andriod应用程序,步骤如下:
在模拟器或者设备上,确认你想要终止的应用程序处于运行状态。
在DDMS中,找到这个应用程序包,并且点击它使其高亮。
点击带有红色停止符号的图标( )终止该进程。
使用文件浏览器
你可以使用DDMS来查看并操作模拟器或设备上的Android文件系统。
表1 给出了Adroid文件系统中的某些重要区域。
 
目录 说明   
/data/data/<packagename>/ 应用程序顶层目录
例如:/data/data/com.androidbook.pettracker   
/data/data/<packagename>/shared_prefs/ 应用程序共享首先项目录
命名的首选项以XML文件的方式进行存储   
/data/data/<packagename>/files/ 应用程序文件目录   
/data/data/<packagename>/cache/ 应用程序缓存目录   
/data/data/<packagename>/databases/ 应用程序数据库目录
例如:
/data/data/com.androidbook.pettracker/databases/test.db   
/sdcard/download/ 用于存储模拟器上的浏览器下载图像   
/data/app/ 用于存储第三方Android应用程序的APK文件 

要浏览Android文件系统,步骤如下:
在DDMS中,选择你想要浏览的模拟器或设备。
切换到File Explorer标签,你将看到底层显示的目录。
浏览某个文件夹或文件。
从模拟器或设备上拷贝文件
 你可以使用文件夹浏览器将模拟器或设备上的文件或文件夹拷贝到计算机上,步骤如下:
使用文件夹浏览器导航至需要拷贝的文件或文件夹,点击使其高亮。
在文件浏览器的右上角,点击Disk图标( )提取设备中的文件。另外,你可以展开图标旁边的下拉菜单( )并从中选择Pull File来执行这一操作。
键入计算机上用于存放这一文件或文件夹的路径,然后点击Save。
向模拟器或设备拷贝文件
 你可以使用文件夹浏览器将计算机上的文件拷贝到模拟器或设备的文件系统中,步骤如下:
使用文件夹浏览器导航至需要拷贝文件的文件夹,点击使其高亮。
在文件夹浏览器的右上角,点击Phone图标( )向设备中添加文件。另外,你可以展开图标旁边的下拉菜单( )并从中选择Push File来执行这一操作。
选择计算机上待拷贝的文件,然后点击Open。
Tip
 文件夹浏览器还支持鼠标拖拽。这也是唯一可以向Andriod文件系统中拷贝文件夹的操作。不过,并不推荐向Android文件系统中拷贝文件夹,因为并没有用于删除它们的选项。但如果你拥有许可权限,则需要使用程序来删除这些文件夹。总之,你可以从计算机上将一个文件或文件夹拖到文件浏览器中,并在适当的位置释放它。
删除模拟器或设备上的文件夹
 你可以使用文件浏览器来删除模拟器或设备上的文件(但不能删除文件夹),步骤如下。
使用文件浏览器导航至需要删除的文件,点击使其高亮。
在文件浏览器的右上角,点击红色的减号图标( )来删除文件。
警示:执行这一操作时你需要特别小心,因为没有任何确认提示,文件将立即删除并且没有办法恢复。
使用模拟器控制
你可以通过DDMS的“Emulator Control (模拟控制) ”标签来操作模拟器实例,在此之前必须选中需要操作的模拟器。可以针对下面的目的使用模拟器控制标签:
修改通话(telephony)状态;
模拟语音通话呼入;
模拟SMS接收;
发送位置坐标。
模拟语音来电
 要使用模拟器控制标签来模拟语音呼入,执行以下步骤:
在DDMS中,选择想要拨打的模拟器。
切换到Emulator标签,你将使用Telephony Actions。
输入模拟呼入的电话号码,它可以包括任意数字、“+”和“#”。
选择Voice单选项。
点击Call按钮。
模拟器将会接收到呼入并响铃。接听电话。
模拟器可以像正常情况一样挂断电话,也可以使用DDMS中的Hang Up按钮终止通话。
模拟短消息接收
 DDMS提供了最稳定的向模拟器发送SMS的方法。其过程同模拟语音来电类似。要使用模拟器控制标签模拟发送SMS,步骤如下:
在DDMS中,选择需要接收SMS的模拟器。
切换到Emulator标签,你将使用Telephony Actions。
输入模拟发送电话号码,它可以包括任意数字、“+”和“#”。
选择SMS单选项。
键入SMS消息的正文。
单击Send按钮。
模拟器将会接收到SMS并显示通知。
发送位置坐标
 向模拟器发送GPS坐标,只需要在模拟器控制标签中简单地输入GPS坐标,点击Send,然后就可以使用模拟器上的Maps应用程序接收当前位置了。
使用应用程序日志
DDMS中融合了LogCat工具,它为DDMS用户界面中底部的一个标签。你可以通过点击内含字母的圆圈图标( )来控制信息的显示量。默认的 代表Verbose(即显示所有信息),其余可选图标包括 (Debug,调试)、 (Infornation,信息)、 (Warning,警告)和 (Error,错误)。
你还可以创建自定义过滤标签以显示仅与调试标记(Debug Tag)相关的LogCat信息。可以通过“+”按钮来添加一个过滤标签以显示仅与特定标记匹配的日志信息。对你的应用程序创建专有的调试标记将非常有用,这样,你就可以过滤LogCat,以保证只显示与你的应用程序相关的日志活动。例如,在你的应用程序中有如下代码:
public static final String DEBUG_TAG=”MyFirstAppLogging”;
Log.i(DEBUG_TAG,”This is info about MyFirstAdroidApp.”);
那么,你可以使用 按钮创建LogCat过滤器。将过滤器命名为“Logging My App”并且设置标记为“MyFirstAppLogging”。这样,你就拥有了一个名为“Logging My App”的LogCat标签,它将只显示带有你的应用程序标签的日志信息。
在模拟器或者目标设备上截屏
你可以在DDMS中截取模拟器或设备的屏幕显示。设备屏幕对于调试来讲非常有用,它使DDMS工具特别适合QA人员,并且受到开发人员的欢迎。要进行屏幕截取,可以执行以下步骤:
在DDMS中,选择需要截屏的模拟器或设备。
在模拟器或设备上,确认屏幕显示的正是你想要截取的画面。
点击带有方形彩×××案的图标( )进行截屏。此时将启动一个截屏窗口。
在截屏窗口中,单击Save按钮保存屏幕截图。
推荐的git资料
如果需要获取其完整的特性说明,可以查看Adroid SDK提供的DDMS文档: