Dalvik Debug Monitor Server

DDMS的全称为Dalvik Debug Monitor Server,它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息,logcat,广播状态信息,模拟电话呼叫,接收SMS,虚拟地理坐标等功能。其本质是通过ddms工具或IDE Debugger与手机中的应用程序进行交互,比如传递命令和消息等。

DDMS对Emulator和外接测试机有同等效用。如果系统检测到它们同时运行,那么DDMS将会默认指向 Emulator。以上2种启动后的操作有些不一样。

 

DDMS 的工作原理

DDMS扮演一个IDE与测试终端上应用程序之间的中间人角色,在Android上,每一个应用程序都有自己的VM并运行在自己的进程中,因此每一个进程都有一个端口用来监听debugger的命令请求。

下图是自己对DDMS工作原理的理解(没看过ddms源码实现,只是根据个人理解绘制,有错误的地方请大伙指正): 对于上图有以下理解要点说明:

  • ddms启动时会连接到adb,并开启一个devices 监视服务,当有设备连接到adb或从adb断开时,ddms都会得到通知。
  • 一旦一个设备连接到adb,ddms就会为此设备创建一个vm的监视服务,当设备上有vm的启动或终止时,ddms都会得到通知。
  • 一旦一个vm开始运行,ddms就会通过adb获得vm的PID,然后为这个vm打开一个端口,监听来自这个vm的debugger。为第一个打开的vm端口为8600,第二个vm为8601,依次类推...
  • ddms会默认打开8700的本地端口,用来接收所有来自终端的指令和信息。

当有IDE Debugger 连接上来时,DDMS查找当前选中的VM,再通过ADB连接到测试终端,流程如下:

# Debugger发送请求指令
IDE Debugger --> DDMS --> ADB --> ADBD --> VM    
# Debugger接收请求指令
VM --> ADBD --> ADB --> DDMS --> IDE Debugger

 

DDMS 组成分析

ddms包含3个模块:ddmlib,ddmuilib,ddms

  • ddmlib:一个pc端的jar包,主要功能是支持pc和移动设备上app的通信。
  • ddmuilib:绘制DDMS的UI。
  • ddms:控制UI绘制和网络通信。


Android的Log系统可以让我们看到系统的调试信息,来自不同app的log被放在一系列circular buffer中,然后显示给我们。

Android的Log系统维护多个circular buffer用来存放log信息,并不是所有的Log都会被发送给默认的Circular buffer,想查看其他Circular buffer中Log信息的话,需要用-b选项启动logcat,你可以选择查看下面几个Circular Buffer中的一个:

  • radio:包含了radio/telephone相关Log的Circular Buffer;
  • events:事件相关的;
  • Dmesg:内核的调试信息。


DDMS的使用可参见这位仁兄的文章:http://346386938.blog.163.com/blog/static/38439420201041203845317/

了解更多DDMS的内容参见:http://developer.android.com/guide/developing/debugging/ddms.html

posted @ 2011-11-19 14:13  残夜  阅读(1065)  评论(0编辑  收藏  举报