JPDA 概览

JPDA 的全称是「Java Platform Debugger Architecture」,它是一个多层的调试架构,支持创建跨平台的调试程序,可同时支持不同的虚拟机实现和不同的 JDK 版本。

JPDA 架构

JPDA 的架构如下图所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
          Components                          Debugger Interfaces

/ |--------------|
/ | VM |
debuggee ----( |--------------| <------- JVM TI - Java VM Tool Interface
\ | back-end |
\ |--------------|
/ |
comm channel -( | <--------------- JDWP - Java Debug Wire Protocol
\ |
|--------------|
| front-end |
|--------------| <------- JDI - Java Debug Interface
| UI |
|--------------|

上面的模块代表的是 Java 虚拟机,下面的模块则是调试方,中间是通信的通道。从上往下看,对应的调试接口依次为:

  1. 最上面 JVM TI,定义了虚拟机提供的调试服务接口
  2. 中间的是 JDWP,定义了调试方和被调试进程之间的通信方式
  3. 最下面的 JDI,它提供了一个更高级别的 Java 语言接口,使得开发人员能够更容易地开发出远程调试程序

再看下它们之间的关系

  1. JVM TI 提供了最基础的服务接口,可用于监控 Java 虚拟机的状态、控制 Java 虚拟机上的程序执行。它是一个双向的接口,既可以监听并处理感兴趣的「事件」,又可以通过 JVM 提供的访问控制「函数」控制程序的运行
  2. 「back-end」基于 JVM TI 实现了 JDWP 的被调试侧的功能
  3. 「front-end」使用 JDWP 实现了调试侧的 JDI 服务接口

参考

https://docs.oracle.com/javase/7/docs/technotes/guides/jpda/architecture.html