一.查看进程的堆栈使用情况 -- Heap
1.选中你要查看的进程;
2.点击“ Update Heap”按钮开启该进程的该项功能,如果单独打开ddms工具,按钮名为“Show heap updates”;
3.点击“Cause GC”按钮来进行垃圾回收,当操作完成后,您会看到一组对象类型和为每种类型已分配的内存;
4.点击列表中的一个对象类型,为该种特定内存大小的对象分配的数量。
二.跟踪对象的内存分配 -- Allocation Tracker
1.在“设备”选项卡中,选择要启用的分配跟踪的进程;
2.在“分配跟踪”选项卡上,单击“开始跟踪”按钮开始分配跟踪,从这一时开始,你的应用程序所做的任何事将被跟踪。
3.单击”Get Allocations“,可以看到一个列表,当要继续跟踪时,可以重新点击”开始跟踪“按钮。
4.要停止跟踪或清除数据,并重新开始,请单击“停止跟踪”按钮。
5.点击列表中某一项,可以看到更多的信息,该条目的方法,所属对象以及代码行号等详细信息。
三.操作仿真器或设备的文件系统 -- File Explorer
1.在“设备”选项卡中,选择您想要查看的文件系统的仿真器。
2.从设备复制文件,在文件浏览器中找到该文件,然后单击“Pull file”按钮。
3.要复制一个文件到设备上的文件资源管理器“Push file ”按钮。
四.检查线程信息 -- Threads
1.在“设备”选项卡中,选择进程;
2.单击”Update Threads“按钮.单独打开ddms,显示”show thread update“。
3.在“Threads”选项卡上,您可以查看所选进程的线程信息。
五.方法分析
方法分析的方式来追踪特定的度量方法,如调用次数,执行时间,执行的方法花费的时间。
在您开始在DDMS的方法分析,注意以下限制:
Android 1.5的设备不被支持。
Android 2.1和更早版本的设备都必须有一个SD卡和你的应用程序必须写入SD卡的权限。
Android 2.2及更高版本的设备并不需要一个SD卡。跟踪日志文件直接传输到你的开发机。
1.在“设备”选项卡中,选择进程。
2.点击Start Method Profiling按钮。
3.与应用程序交互,启动你要分析的方法。
4.单击“停止”的方法剖析按钮。 DDMS停止分析您的应用程序,打开Traceview的方法收集的分析信息。
六.使用的网络流量工具 -- Network Statistics
在Android 4.0, DDMS 具备监控详细的网络使用情况的功能,使得它可以跟踪您的应用程序的网络请求。使用这个工具,你可以监视应用程序的数据传输,并适当优化的底层代码。
七.使用LogCat
当你设置你的日志,你可以用logcat的功能, DDMS过滤某些信息通过下面的按钮:
详细
调试
信息
警告
错误
您还可以设置自己的自定义过滤器指定更多的细节,如过滤消息的日志标签或生成日志消息的进程ID 。
八.模拟电话业务和位置 -- Emulator Control
”Emulator control “可以模拟手机的语音和数据网络的状态。这是非常有用的,当你想测试你的应用程序在不同网络环境下的鲁棒性。可以设置下面的选项:
- Voice - unregistered, home, roaming, searching, denied
- Data - unregistered, home, roaming, searching, denied
- Speed - Full, GSM, HSCSD, GPRS, EDGE, UMTS, HSDPA
- Latency - GPRS, EDGE, UMTS
声音 - 在“来电号码”字段中输入一个数字,然后点击呼叫,模拟呼叫发送到模拟器或手机。点击挂断键终止通话。
短信 - 来电号码字段和在消息中:“字段中输入一个数字,然后点击”发送“按钮发送消息。
十.设置手机地理位置
如果您的应用程序依赖于位置的手机,你可以有的DDMS送您的设备或AVD一个模拟的位置。这是非常有用的,如果你想测试你的应用程序的特定位置的功能,而不必实际移动的不同方面。您可以使用下面的地理位置数据类型:
手动设置位置 - 通过手动指定十进制或六十进制的经度和纬度值。
GPX - GPS交换文件
KML - Keyhole标记语言文件
简单介绍如何应用DDMS协助开发Android Apps
DDMS 的全称是Dalvik Debug Monitor Service,它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、虚拟地理坐标等等。
DDMS 工具存放在SDK -tools/路径下,可以直接双击ddms.bat运行,也可以通过terminal/console(CLS)输入ddms(在Mac或者Linux系统中输入./ddms)启动程序。DDMS对Emulator和外接测试机有同等效用。如果系统检测到它们(VM)同时运行,那么DDMS将会默认指向Emulator。
DDMS 的工作原理
DDMS将搭建起IDE与测试终端(Emulator 或者connecteddevice)的链接,它们应用各自独立的端口监听调试器的信息,DDMS可以实时监测到测试终端的连接情况。当有新的测试终端连接后,DDMS将捕捉到终端的ID,并通过adb建立调试器,从而实现发送指令到测试终端的目的。
DDMS监听第一个终端App进程的端口为8600,APP进程将分配8601,如果有更多终端或者更多APP进程将按照这个顺序依次类推。DDMS通过8700端口(”base port”)接收所有终端的指令。如果想了解更多资料 Configuring your IDE to attach to port 8700 for debugging。
通过File > Preferences查看DDMS相关设置,所有的参数设定将保存在 “$HOME/.ddmsrc”
下边通过GUI简单了解DDMS的一些功能:
Devices
在GUI的左上角可以看到标签为”Devices”的面板,这里可以查看到所有与DDMS连接的终端的详细信息,以及每个终端正在运行的APP进程,每个进程最右边相对应的是与调试器链接的端口。因为Android是基于Linux内核开发的操作平台,同时也保留了Linux中特有的进程ID,它介于进程名和端口号之间。
在面板的右上角有一排很重要的按键他们分别是Debug the selected process、Update Threads、Update Heap、Stop Process和ScreenShot。
Debug Selected Process:用于表现被选择进程与调试器连接状态,如果进程前带有绿色表示,那么说明该进程的工程文件在当前Workspace中处于打开状态,并允许我们开启调试器监听进程运行情况。
Update Threads: 用于查看当前进程所包含的线程。当选中任意进程后,点击这个命令可以在右侧面板的Threads标签里看到详细的线程运行情况,同时在被选中的进程名称后边会出现显示线程信息标识。
Update Heap: 与上一个Update Threads类似,只不过这个命令用于查看当前进程堆栈内存的使用情况。
Stop Process: 这个应该非常容易理解,终止当前进程。
ScreenShot: 截取当前测试终端桌面。
Emulator Control
通过这个面板的一些功能可以非常容易的使测试终端模拟真实手机所具备的一些交互功能,比如:接听电话,根据选项模拟各种不同网络情况,模拟接受SMS消息和发送虚拟地址坐标用于测试GPS功能等。
- Telephony Status: 通过选项模拟语音质量以及信号连接模式。
- Telephony Actions: 模拟电话接听和发送SMS到测试终端。
- Location Control: 模拟地理坐标或者模拟动态的路线坐标变化并显示预设的地理标识。
- Manually send individual longitude/latitude coordinates to the device : 手动为终端发送二维经纬坐标。
- Use a GPX file describing a route for playback to the device : 通过GPX文件导入序列动态变化地理坐标,从而模拟行进中GPS变化的数值。
- Use a KML file describing individual placemarks for sequenced playback to the device : 通过KML文件导入独特的地理标识,并以动态形式根据变化的地理坐标显示在测试终端。
Logcat
现实所有针对测试终端操作的日志记录,可以很明显的区分开警告信息和错误信息。
利用DDMS从模拟器上导入导出文件学习内容: 你将学会如何使用Eclipse的DDMS-View 从模拟器上导入导出文件 . 描述:
依照下图打开 DDMS-View . (如果你上面没有按钮A, 那么请按照 B所示方式打开).
打开文件浏览器,使用右上角的导入导出按钮来操作目标文件..
另外一种导入方法:
运行模拟器,在命令行模式下到 “…/android_sdk/tools”目录下,使用下面的命令
adb push <local_source> <emulator_destination>
Android截图方法之DDMS篇提起Android截图,这里虽然Google在Android操作系统中提供了帧缓存的权限许可,但是没有Root权限仍然无法很好的截图,现在安装好Android SDK和Eclipse,在DDMS中可以看到连接Devices标签中找到可用的唯一个图标,如图下图所示:
最终在Device Screen Capture窗口中就是Android屏幕截图效果,直接单击Save按钮即可保存图片为PNG格式。如图
不使用DDMS打电话
通过gsm call命令可以像Android模拟器打电话,除了在EclipseADT的DDMS中通过按钮Dial外,还可以通过DDMS外壳调用gsm call命令直接拨打,我们首先需要启动AndroidEmulator,然后在cmd环境下执行telnet localhost 5554 下面就可以向Android模拟器拨号,参数为gsmcall < phoneNum> ,比如给10086打电话为gsm call +10086 简单介绍如何应用DDMS协助开发Android Apps
DDMS 的全称是Dalvik Debug Monitor Service,它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、虚拟地理坐标等等。
DDMS 工具存放在SDK -tools/路径下,可以直接双击ddms.bat运行,也可以通过terminal/console(CLS)输入ddms(在Mac或者Linux系统中输入./ddms)启动程序。DDMS对Emulator和外接测试机有同等效用。如果系统检测到它们(VM)同时运行,那么DDMS将会默认指向Emulator。
DDMS 的工作原理
DDMS将搭建起IDE与测试终端(Emulator 或者connecteddevice)的链接,它们应用各自独立的端口监听调试器的信息,DDMS可以实时监测到测试终端的连接情况。当有新的测试终端连接后,DDMS将捕捉到终端的ID,并通过adb建立调试器,从而实现发送指令到测试终端的目的。
DDMS监听第一个终端App进程的端口为8600,APP进程将分配8601,如果有更多终端或者更多APP进程将按照这个顺序依次类推。DDMS通过8700端口(”base port”)接收所有终端的指令。如果想了解更多资料 Configuring your IDE to attach to port 8700 for debugging。
通过File > Preferences查看DDMS相关设置,所有的参数设定将保存在 “$HOME/.ddmsrc”
下边通过GUI简单了解DDMS的一些功能:
Devices
在GUI的左上角可以看到标签为”Devices”的面板,这里可以查看到所有与DDMS连接的终端的详细信息,以及每个终端正在运行的APP进程,每个进程最右边相对应的是与调试器链接的端口。因为Android是基于Linux内核开发的操作平台,同时也保留了Linux中特有的进程ID,它介于进程名和端口号之间。
在面板的右上角有一排很重要的按键他们分别是Debug the selected process、Update Threads、Update Heap、Stop Process和ScreenShot。
Debug Selected Process:用于表现被选择进程与调试器连接状态,如果进程前带有绿色表示,那么说明该进程的工程文件在当前Workspace中处于打开状态,并允许我们开启调试器监听进程运行情况。
Update Threads: 用于查看当前进程所包含的线程。当选中任意进程后,点击这个命令可以在右侧面板的Threads标签里看到详细的线程运行情况,同时在被选中的进程名称后边会出现显示线程信息标识。
Update Heap: 与上一个Update Threads类似,只不过这个命令用于查看当前进程堆栈内存的使用情况。
Stop Process: 这个应该非常容易理解,终止当前进程。
ScreenShot: 截取当前测试终端桌面。
Emulator Control
通过这个面板的一些功能可以非常容易的使测试终端模拟真实手机所具备的一些交互功能,比如:接听电话,根据选项模拟各种不同网络情况,模拟接受SMS消息和发送虚拟地址坐标用于测试GPS功能等。
- Telephony Status: 通过选项模拟语音质量以及信号连接模式。
- Telephony Actions: 模拟电话接听和发送SMS到测试终端。
- Location Control: 模拟地理坐标或者模拟动态的路线坐标变化并显示预设的地理标识。
- Manually send individual longitude/latitude coordinates to the device : 手动为终端发送二维经纬坐标。
- Use a GPX file describing a route for playback to the device : 通过GPX文件导入序列动态变化地理坐标,从而模拟行进中GPS变化的数值。
- Use a KML file describing individual placemarks for sequenced playback to the device : 通过KML文件导入独特的地理标识,并以动态形式根据变化的地理坐标显示在测试终端。
Logcat
现实所有针对测试终端操作的日志记录,可以很明显的区分开警告信息和错误信息。
利用DDMS从模拟器上导入导出文件学习内容: 你将学会如何使用Eclipse的DDMS-View 从模拟器上导入导出文件 . 描述:
依照下图打开 DDMS-View . (如果你上面没有按钮A, 那么请按照 B所示方式打开).
打开文件浏览器,使用右上角的导入导出按钮来操作目标文件..
另外一种导入方法:
运行模拟器,在命令行模式下到 “…/android_sdk/tools”目录下,使用下面的命令
adb push <local_source> <emulator_destination>
Android截图方法之DDMS篇提起Android截图,这里虽然Google在Android操作系统中提供了帧缓存的权限许可,但是没有Root权限仍然无法很好的截图,现在安装好Android SDK和Eclipse,在DDMS中可以看到连接Devices标签中找到可用的唯一个图标,如图下图所示:
最终在Device Screen Capture窗口中就是Android屏幕截图效果,直接单击Save按钮即可保存图片为PNG格式。如图
不使用DDMS打电话
通过gsm call命令可以像Android模拟器打电话,除了在EclipseADT的DDMS中通过按钮Dial外,还可以通过DDMS外壳调用gsm call命令直接拨打,我们首先需要启动AndroidEmulator,然后在cmd环境下执行telnet localhost 5554 下面就可以向Android模拟器拨号,参数为gsmcall < phoneNum> ,比如给10086打电话为gsm call +10086
====================================================================android调试工具DDMS的使用详解=======================================================================
具体可见http://developer.android.com/tools/debugging/ddms.html。 DDMS为IDE和emultor、真正的android设备架起来了一座桥梁。开发人员可以通过DDMS看到目标机器上运行的进程/现成状态,可以 android的屏幕到开发机上,可以看进程的heap信息,可以查看logcat信息,可以查看进程分配内存情况,可以像目标机发送短信以及打电话,可 以像android开发发送地理位置信息。可以像gdb一样attach某一个进程调试。 SDK tools目录下提供了ddms的完整版,直接运行即可。下面以Eclipse的DDMS perspective为例简单介绍DDMS的功能。
跟debug,java的perspective一样,安装好adt后会有一个DDMS得perspective,打开即可。
打开后的窗口为,
device窗口罗列模拟器中所有的进程,右上角那一排按钮分别为:调试某个进程,更新某个进程,更新进程堆栈信息,停止某个进程,最后一个图片按 钮时抓取android目前的屏幕。
当你选中某个进程,并按下调试进程按钮时,如果eclipse中有这个进程的代码,那就可以进行源代码级别的调试。有点像gdb attach。图片抓取按钮可以把当前android的显示桌面抓到你的机器上,也是非常有用。
右边那个窗口中有threads, heap , file explorer选项卡。分别显示线程统计信息,栈信息,以及android的文件系统。
file explorer非常有用,他可以把文件上传到android手机,或者从手机下载下来,也可以进行删除操作。选中file explorer选项卡后,按下面三个按钮便可实现对android手机文件系统的上传,下载,删除操作。
emulator control也是非常重要的,通过它可以像手机发送短信, 打电话,已经更新手机位置信息。
总结:
eclipse adt目前提供的的ddms功能只是真正ddms的一小部分,你 可以直接使用tools下面的ddms来使用所有功能。其中有一个查看进程内存分配的功能比较有用。
DDMS全称:Dalvik Debug Monitor Service
一,DDMS的作用它提供截屏,查看线程和堆的信息,logcat,进程,广播状态信息,模拟来电呼叫和短信,虚拟地理坐标等等。
二,DDMS怎样工作1,每一个Android应用都运行在一个Dalvik虚拟机实例里,而每一个虚拟机实例都是一个独立的进程空间。虚拟机的 线程机制,内存分配和管理,Mutex等等都是依赖底层操作系统而实现的。所有Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的 依赖操作系统的线程调度和管理机制。
2,DDMS在IDE与设备或模拟器之间的起着中间人的角色。
3,DDMS启动时会与ADB之间建立一个device monitoring service用于监控设备。当设备断开或链接时,这个service就会通知DDMS。
4,当一个设备链接上时,DDSM和ADB之间又会建立VM monitoring service用于监控设备上的虚拟机。
5,通过ADB Deamon与设备上的虚拟机的debugger建立链接,这样DDMS就开始与虚拟机对话了。
三,端口1,对于设备上每个虚拟机的debugger, DDMS都会开启一个监听端口。端口从8600开始。
2,8700端口
四,左边面板1,左边显示了所有当前能找到的所有模拟器或设备列表和每个设备当前正在运行的虚拟机列表。虚拟机是按程序的包命来显示的。
2,通过这些列表可以找到运行着想调试的activity的虚拟机。每个虚拟机旁边的是“debugger pass-through”端口,链接到其中一个端口就会链接到设备上对应的虚拟机。不管如何,在用DDMS时,只需要链接到8700端口,因为DDSM 转发所有的通信到当前选择的虚拟机。这样,就不用在每次切换虚拟机是重新配置debugger端口。
3,当一个正在运行的程序调用waitForDebugger()函数时,客户端名字旁边会显示一个红色的icon,知道debugger连上对 应的虚拟机,这是debugger会变成绿色。
4,如果看到叉icon,着意味着DDMS用于不能打开虚拟机的端口而不能建立debugger与虚拟机建立连接。如果看到所有的虚拟机是这样, 很可能是有另外一个DDSM实例在运行。
五,右边面板1,info
这里显示关于选中的VM的一般的信息,包括进程ID,包名,和虚拟机版本。
2,Threads
线程视图列出了此进程的所有线程。
ID:虚拟机分配的唯一的线程ID,在Dalvik里,它们是从3开始的奇数。
Tid:linux的线程ID,For the main thread in a process, this will match the process ID.
Stauts:线程状态,
running:正在执行程序代码
sleeping:执行了Thread.sleep()
monitor:等待接受一个监听锁。
wait:Object.wait()
native:正在执行native代码
vmwait:等待虚拟机
zombie:线程在垂死的进程
init:线程在初始化(我们不可能看到)
starting:线程正在启动(我们不可能看到)
utime:执行用户代码的累计时间
stime:执行系统代码的累计时间
name:线程的名字
4,VM Heap
展示一些堆的状态,在垃圾回收其间更新。当选定一个虚拟机时, VM Heap视图不能显示数据,可以点击右边面包上的带有绿色的”Show heap updates”按钮,然后在点击”Cause GC “实施垃圾回收更新堆的状态。
6,Allocation Tracker
在这个视图里,我们可以跟踪每个选中的虚拟机的内存分配情况。点击”Start Tracking”后点击”Get Allocations “就可以看到。
7,Emulator Control
在这里,可以模拟一些设备状态和行为。
Telephony Status:改变电话语音和数据方案的状态,模拟不同的网络速度。
TelePhony Actions:发送模拟的电话呼叫和短信到模拟器。
Location Controls:发送虚拟的定位数据到模拟器里,我们就可以执行定位之类的操作。可以收工的在Manual里输入经度纬度发送到模拟器,也可以通过 GPX和KML文件。
六,其他1,File Explorer
通过Device > File Explorer 就打开File Explorer。这里可以浏览文件,上传上载删除文件,当然这是有相应权限限制的。
2,Screen Capture
通过Device > Screen Capture 就可以截图。
3,Exploring Processes
通过Device > Show process status ,这里的信息是通过shell命令”ps -x”输出的。
4,Examine Radio State
通过Device > Dump radio,检测广播状态。
5,Stop a Virtual Machine
通过Actions > Halt VM ,停止一个虚拟机。