深入 Java 调试体系: 第 1 部分,初探JPDA 体系

JPDA(Java Platform Debugger Architecture)是 Java 平台调试体系结构的缩写,通过 JPDA 提供的 API,开发人员可以方便灵活的搭建 Java 调试应用程序。

JPDA 主要由三个部分组成:

1)、Java 虚拟机工具接口(JVMTI)
2)、Java 调试线协议(JDWP)
3)、Java 调试接口(JDI)

JPDA各个组成块:

JPDA 定义了一个完整独立的体系,它由三个相对独立的层次共同组成,而且规定了它们三者之间的交互方式,即通信的接口。

这三个层次由低到高分别是 Java 虚拟机工具接口(JVMTI),Java 调试线协议(JDWP)以及 Java 调试接口(JDI)。可以分别比喻为调试者(debugger)和被调试者(debuggee),以及他们中间的通信器。

被调试者:运行于我们想调试的 Java 虚拟机之上,它可以通过 JVMTI 这个标准接口,监控当前虚拟机的信息;

调试者:定义了用户可使用的调试接口,通过这些接口,用户可以对被调试虚拟机发送调试命令,同时调试者接受并显示调试结果。

调试者和被调试者之间:调试命令和调试结果,都是通过 JDWP 的通讯协议传输的。所有的命令被封装成 JDWP 命令包,通过传输层发送给被调试者,被调试者接收到 JDWP 命令包后,解析这个命令并转化为 JVMTI 的调用,在被调试者上运行。类似的,JVMTI 的运行结果,被格式化成 JDWP 数据包,发送给调试者并返回给 JDI 调用。

图1 JPDA模块层次图

当然,开发人员完全可以不使用这完整的三层,根据自己的理解来基于其中的一层来开发自己的应用。例如只通过通过JVMTI函数来开发调试程序等。

这三层的详细介绍如下:

Java 虚拟机工具接口(JVMTI)

JVMTI全称是Java Virtual Machine Tool Interface,中文翻译是Java虚拟机工具接口。它是一套有JVM提供的native接口,它是JPDA体系最底层,也是核心层,所有的调试功能都需要JVMTI来提供。拥有这些接口时,开发者除了可以调试Java程序,还可以查看它们的运行状态、设置回调函数以及控制某些环境变量。在JVMTI之前,还有JVMDI和JVMPI,它们分别用来提供调试Java程序以及Java程序调节性能的功能,在jdk5.0之后就取消了JVMDI和JVMPI这两套接口。JVMDI 在最新的 Java SE 6 中已经不提供支持,而 JVMPI 也计划在 Java SE 7 后被彻底取代。

Java 调试线协议(JDWP)

JDWP全称是Java Debug Wire Protocol,中文翻译是一种专门为Java调试而设计的一个通讯交互协议。协议包里的内容包括请求命令、回应数据以及错误代码。Sun公司的实现为jdwp.dll(jdwp.so),它实现了一个代理,负责解析前端向JVM发送的请求或命令,将其转化为JVMTI调用,然后将JVMTI函数的返回值封装成JDWP数据包发给前端。注意:JDWP本身不包括传输层的实现,传输层需要独立实现,但是JDWP包含了和传输层交互的严格定义。Sun公司提供的jdk中,在传输层上它提供了socket方式。

Java 调试接口(JDI)

JDI全称是Java Debug Interface,是三个模块中的最高层,在大多数JDK中,它都是有Java语言来实现的,通过它,开发者可以通过前端JVM上的调试器来调试后端JVM上被调试的程序。

Java调试接口的特点

Java语言是第一个使用虚拟机的编程语言,由于虚拟机的存在,只要掌握了虚拟机,就掌握了内存分配、线程管理、即时优化等运行状态。这样来,Java调试的本质,就是和JVM交互,这和其它语言是有着本质的区别。

 

参考资料http://www.ibm.com/developerworks/cn/java/j-lo-jpda1/index.html

 

posted on 2014-05-26 17:47  leocook  阅读(942)  评论(0编辑  收藏  举报

导航