JPDA

1. Java Platform Debugger Architecture

JPDA —— Java Playform Debugger Architecture 由三个接口组成,在桌面系统的 IDE 中,经常使用它们来完成调试器功能。JVM TI —— Java Virtual Machine Tools Interface 定义了虚拟机必须为 debug 提供的服务 (JVM TI 是 JVMDI —— Java Virtual Machine Debug Interface 的替代品)。JDWP —— Java Debug Wire Protocol 定义了被调试进程和实现 JDI 调试器的 front-end 之间传输的信息和请求的格式。JDI —— Java Debug Interface 定义了用户代码级别的信息和请求。

2. Structure Overview

3. JPDA Modularity

3.1. JVM TI Modularity

JVM TI 描述的是 VM 提供的功能,以便调试在此 VM 下运行的 Java 应用程序。在 JPDA 中,JVM TI 由 VM 实现,客户端是 JPDA back-end。在 JPDA 的参考实现中,JVM TI 由 Java HotSpot VM 实现,客户端是 back-end 的参考实现,作为 JDK 附带的本地共享库(如,jdwp.so, jdwp.dll,...)提供。

除了 Java HotSpot VM,其他许多 VM 也实现了 JVM TI。back-end 的实现已经移植到了其他平台上。除了 back-end,还有不少 JVM TI 客户端,尤其是应用程序的代理,它们不仅允许调试 native 的代码,还允许调试 Java 程序代码,因此,需要 native 级别的控制与信息。我们知道,目前没有 back-end 的净室实现,尽管这是可能的,但工作量很大。

3.3. JDI Modulartiy

JDI 为调试 Java 程序提供了一个纯 Java 的接口。在 JPDA 中,JDI 是被调试进程中 VM 的调试器进程的远程视图。它由 front-end 实现,而类似于调试器的应用程序(如 IDE,debugger,tracer,monitoring tool,...)是客户端。

JDI 可以由具有应用程序静态视图的系统实现。它也可以由一个与 JPWP 或 front-end 机制完全不同的系统来实现,用于收集信息或控制 VM。

Components

debuggee

Java Virtual Machine Tool Interface (JVM TI)

由虚拟机实现的本地接口。

定义了虚拟机必须为调试提供的服务。包括对信息(如,当前栈帧)、操作(如,设置断点)、通知(如,遇到断点时)的请求。除此之外,调试器还可以使用 VM 信息(如,JNI —— Java Native Interface),不过这也是所有调试器指定信息的来源。

指定 VM 接口允许允许任何 VM 实现者轻松地插入调试体系结构中。它还允许交替的通信信道实现。不遵循这个接口的 VM 实现仍然可以通过 JDWP —— Java Debug Wire Protocol 提供访问。

Java Debug Wire Protocol (JDWP)

定义了被调试进程与调试 front-end 之间传输的信息和请求格式。它并没有定义传输机制(套接字、串行线、共享内存等)。

协议规范允许被调试者和调试者 front-end 在不同的 VM 实现或者是不同的平台上运行。它还运行前端用 Java 以外的语言编写,或者被调试者不是本地的(如,Java)。

信息和请求大致处于 JVM TI 级别,但包括带宽问题所需的附加信息和请求,例如信息过滤和批处理。

Java Debug Interface (JDI)

完全由 front-end 实现的 Java 接口。

定义了用户代码级别的信息和请求。

尽管实现调试器我们可以直接使用 JDWP—— Java Debug Wire Protocol 或者是 JVM TI —— Java Virtual Machine Debug Interface,但这个接口能够极好地促使调试功能与 IDE 集成。我们建议所有的调试器开发都应该使用 JDI 层。

发布了48 篇原创文章 · 获赞 2 · 访问量 6326

猜你喜欢

转载自blog.csdn.net/qq_39291919/article/details/103932475