JPDA概念将调试过程分为两部分:被调试的程序(被调试者-debuggee)和JDI。JDI一般为一个调试应用程序的用户接口(或Java IDE的一部分)。被调试的应用程序在后端运行,而JDI在前端运行。在前端与后端之间有一个通信通道运行JDWP协议;因此,被调试程序与调试器可以位于同一个系统内,也可位于不同的系统中。
从开发者的角度,一个调试应用程序可进入任何JPDA层面。因为JDI是最高层,也最容易使用,我们推荐使用这个接口。假设一家公司用JDI开发了一个调试器。公司能够把它用于参考实例中,它将自动与VM和Sun支持的平台协同工作,因此大多数IDE供应商采用这种方式。还可以这样,例如,参考实例在前端运行,被调试者运行另一家公司执行JDWP(它可能运行或忽略JVMTI)的VM。
一些调试器可能建立在较低层面之上,如JDWP(例如,如果Java没有编写前端)或JVMTI(针对需要低级功能的专用调试器)。
调试器的后端负责由调试器前端向被调试者VM传输请求,如“告诉我变量X的值”;它还负责向前端传输对这些请求(包括像到达断点之类的预计事件)的响应。后端与前端利用JDWP通过一个通信通道进行通信。后端与被调试者VM利用JVMTI进行通信。
通信通道连接调试器的前端与后端。可以认为它由两个装置组成:一个连接器和一个传送器。连接器是一个JDI对象,它在前端与后端建立连接;可能有三种类型的连接器:
收听型:前端从后端收听一个进入的连接。
依附型:前端依附到一个已运行的后端上。
发布型:前端发布运行被调试者代码和后端的Java过程。









