深圳Java培训
达内深圳宝安中心

136-3244-2201

热门课程

Java调试体系JPDA和JVMTI

  • 时间:2015-12-23
  • 发布:深圳Java培训
  • 来源:达内新闻

Java虚拟机设计了专门的API接口供调试和监控虚拟机使用,被称为Java平台调试体系即Java Platform Debugger Architecture(JPDA)。JPDA按照抽象层次,又分为三层,分别是

JVM TI - Java VM Tool Interface

虚拟机对外暴露的接口,包括debug和profile

JDWP - Java Debug Wire Protocol

调试器和应用之间通信的协议

JDI - Java Debug Interface

Java库接口,实现了JDWP协议的客户端,调试器可以用来和远程被调试应用通信

用一个不是特别准确但是比较容易理解的类比,大家可以和HTTP做比较,可以推断他就是一个典型的C/S应用,所以也可以很自然的想到,JDI是用TCP Socket和虚拟机通信的,后面会详细再介绍。

IDE+JDI = 浏览器

JDWP = HTTP

JVMTI = RESTful接口

Debugee虚拟机= REST服务端

和其他的Java模块一样,Java只定义了Spec规范,也提供了参考实现(Reference Implementation),但是第三方完全可以参照这个规范,按照自己的需要去实现其中任意一个组件,原则上除了规范上没有定义的功能,他们应该能正常的交互,比如Eclipse就没有用Sun/Oracle的JDI,而是自己实现了一套(由于开源license的兼容原因),因为直接用JDWP协议调用JVMTI是不会受GPL“污染”的。的确有第三方调试工具基于JVMTI做了一套调试工具,这样效率更高,功能更丰富,因为JDI出于远程调用的安全考虑,做了一些功能的限制。用户还可以不用JDI,用自己熟悉的C或者脚本语言开发客户端,远程调试Java虚拟机,所以JPDA真个架构是非常灵活的。

Java调试体系JPDA和JVMTI

JVMTI

JVMTI是整个JPDA中最中要的API,也是虚拟机对外暴露的接口,掌握了JVMTI,你就可以真正完全掌控你的虚拟机,因为必须通过本地加载,所以暴露的丰富功能在安全上也没有太大问题。更完整的API内容可以参考JVMTI SPEC:

虚拟机信息

堆上的对象

线程和栈信息

所有的类信息

系统属性,运行状态

调试行为

设置断点

挂起现场

调用方法

事件通知

断点发生

异步调用

在JPDA的这个图里,agent是其中很重要的一个模块,正是他把JDI,JDWP,JVMTI三部分串联成了一个整体。简单来说agent的特性有

C/C++实现的

被虚拟机以动态库的方式加载

能调用本地JVMTI提供的调试能力

实现JDWP协议服务器端

与JDI(作为客户端)通信(socket/shmem等方式)

【更多JAVA资讯JAVA培训新闻请关注深圳JAVA培训sz.java.tedu.cn】

========深圳达内学院联系方式========

深圳达内联系QQ:1548888884

咨询电话:400-0755-581

学校网址:http://sz.java.tedu.cn

扫描二维码加入我们的微信平台,微信号1:tarenaz

微信号2:sz_tarena

联系地址:深圳市宝安中心区宝源路1053号资信达大厦401室

上一篇:Java调试概述
下一篇:Java 爬虫框架——SeimiCrawler V0.2.5

预计发布的Java 9中,很令人期待的是什么?

【深圳JAVA培训】世界十类很急需IT人才

JAVA——很吃香的编程语言

为什么程序员是很有钱的一批人?

选择城市和中心
贵州省

广西省

海南省