热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DalvikDebugMonitorServer

DDMS的全称为DalvikDebugMonitorServer,它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆

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

转:https://www.cnblogs.com/oubo/archive/2011/11/19/2394623.html



推荐阅读
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • 本文介绍了使用jQuery实现图片预加载和等比例缩放的方法,同时提供了演示和相关代码。该方法可以重置图片的宽度和高度,并使图片在水平和垂直方向上居中显示。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
author-avatar
happy王琦2010_190
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有