dalvik debugger模块实现细节
来源:互联网 发布:apache tika 编辑:程序博客网 时间:2024/06/05 17:30
转自:http://littlejeffrey.blog.163.com/blog/static/1940146862012914105720807/
1.dalvik debugger模块设计与交互方式
ddms/jdi->jdwp->debugger interface->vm虚拟机的debug功能是遵守jdwp协议的,dalvik在jdwp协议上进行扩展,定义了ddms协议。在工程模式下,虚拟机的ddm默认是打开的,虚拟机启动之后,就会启动一个jdwp线程,ddm通过jdwp协议发送和接收数据,当手机发现有ddms接入的时候,jdwp会建立连接,并进行数据交换。
dalvik虚拟机debug和ddms功能模块化非常明显。debugger和ddms都是遵守jdwp协议的,debug数据交互完全就是jdwp协议的实现,而ddms协议就是利用jdwp协议中未使用的命令集(199/1)进行交互。
由于jdwp是一个有完整定义的协议,因此具有可移植性,为了保持这个特性,dalvik将jdwp同虚拟机进行分离,具体分离方式是:jdwp不直接通虚拟机进行交互,而是通过Debugger.c中的接口进行交互(jdwp只调用Debugger.c中定义的函数,而虚拟机也不直接调用jdwp中的接口。当出现互调时,都在Debugger.c中进行封装)。
ddms协议也被定位成了可移植的协议,因此整个ddms协议都是由java代码实现,ddms的数据通讯一般情况是ddms->jdwp->debugger.c->ddm.c->java代码->虚拟机native函数->虚拟机内部->debugger.c->jdwp->ddms。
debugger同虚拟机建立通讯的方式有两种:主动方式和被动方式。
1)主动方式中,程序使用debug as的方式启动,启动之后,jdi询问vm是否支持debugger,在支持debugger的情况下,虚拟机会一直等待debugger连接完成才会继续。
2)被动方式中,进程使用普通的方式启动,启动之后,ddms和虚拟机建立连接。然后虚拟机运行在non-debugger的模式下,知道在ddms中点击debug,ddms会发送一个非ddms包,虚拟机的探测到从jdwp接收到的非ddms包,就认为有一个debugger连接产生了,因此切换到debug模式。
jdwp自身会区分数据来源:从jdi/ddms发送来的数据被认为是请求(req),这种请求被JdwpHandle处理;从虚拟机内部发送的数据被认为是事件(event),由JdwpEvent处理。
其他:
经过统计,android应用大部分运算和内存分配都集中在一个主线程中,因此dalvik选择了偏向锁来实现线程间的同步,偏向锁在单个线程请求的情况下可以提高加锁的效率,当多线程竞争锁时,偏向锁会变重,从而退化成一个普通的锁。
- dalvik debugger模块实现细节
- IDA Dalvik debugger: tips and tricks
- Node.js Debugger模块
- Debugger
- debugger
- Debugger
- Android之Dalvik模块和ART模式
- dalvik对于JPDA的实现
- GetByteArrayElements 在DalVik的实现
- CERTI之RTIG消息处理模块实现细节的举例说明(一)
- Dalvik
- Dalvik
- Dalvik
- Dalvik
- Dalvik
- Dalvik
- Dalvik
- Dalvik
- INI文件编程
- windows远程控制linux的最佳方案
- Javascript 中 null、NaN和undefined的区别
- HTC批评三星新旗舰GS4软件新功能只是花架子
- Flex 中的outerDocument
- dalvik debugger模块实现细节
- 指针 例题:报数
- android - 消息机制
- DB2 SQLSTATE 消息大全
- Oracle 11gR2 使用 RMAN duplicate from active database 复制数据库
- VSS The plug-in advanced settings for SourceSafe Internet require SSL connections
- windows 和 linux设置环境变量
- Hibernate3延迟加载(lazy loading)详细分析与解释
- 程序只运行一个实例方法