Dalvik Debug Monitor Server

本文详细阐述了DDMS(DalvikDebugMonitorServer)的全貌,包括其功能、工作原理以及如何在实际场景中应用。通过理解DDMS如何作为IDE与测试终端上应用程序之间的中间人角色,读者能够掌握如何利用它进行如截屏、查看线程和堆信息、模拟电话呼叫等一系列调试操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值