深入Java调试体系: 第1部分,JPDA体系概览
JPDA(Java Platform Debugger Architecture)是 Java 平台调试体系结构的缩写,通过 JPDA 提供的 API,开发人员可以方便灵活的搭建 Java 调试应用程序。 JPDA 主要由三个部分组成:Java 虚拟机工具接口(JVMTI),Java 调试线协议(JDWP),以及 Java 调试接口(JDI),本系列将会详细介绍这三个模块的内部细节、通过实例为读者揭开 JPDA 的面纱。本文是该系列的第一篇,将会着重从整体上介绍 JPDA 的各个组成,阐述它们彼此之间的内在关联。
JPDA 概述
所有的程序员都会遇到 bug,对于运行态的错误,我们往往需要一些方法来观察和测试运行态中的环境。在 Java 程序中,最简单的,您是否尝试过使用 System.out.println() 来输出您的 Java 程序的执行中的各种变量状态来发现您的 Java 程序运行时的问题?这种方式方便易用,在一些简单的情况下能够解决您的问题,但是如果当您的程序运行在远程环境上,或者当前环境不允许控制台终端输出(比如,考虑一下虚拟机初始化之时),您无法获取终端输出的时候呢?或者,如果您根本无法本地修改运行您的程序?
无须担心,您可以通过很多的调试工具来帮助您解决这个问题,常见的 IDE 都附带一个非常直观简单的调试工具,比如 Eclipse(图 1)就提供一个功能非常全面,操作非常简单的调试器。
图 1. 使用 Eclipse 调试 Java 程序
其他的一些常见的 Java IDE,比如 Netbeans 和 IntelliJ 等等也都提供了类似的功能,您甚至能不用 IDE 提供的图形界面,使用 JDK 自带的 jdb 工具,以文本命令的形式来调试您的 Java 程序。这些形形色色的调试器都支持本地和远程的程序调试,那么它们是如何被开发的?它们之间存在着什么样的联系呢?我们不得不提及 Java 的调试体系―― JPDA .
我们知道,Java 程序都是运行在 Java 虚拟机上的,我们要调试 Java 程序,事实上就需要向 Java 虚拟机请求当前运行态的状态,并对虚拟机发出一定的指令,设置一些回调等等,那么 Java 的调试体系,就是虚拟机的一整套用于调试的工具和接口。
对于 Java 虚拟机接口熟悉的人来说,您一定还记得 Java 提供了两个接口体系,JVMPI(Java Virtual Machine Profiler Interface)和 JVMDI(Java Virtual Machine Debug Interface),而它们,以及在 Java SE 5 中准备代替它们的 JVMTI(Java Virtual Machine Tool Interface),都是 Java 平台调试体系(Java Platform Debugger Architecture,JPDA)的重要组成部分。 Java SE 自 1.2.2 版就开始推出 Java 平台调试体系结构(JPDA)工具集,而从 JDK 1.3.x 开始,Java SDK 就提供了对 Java 平台调试体系结构的直接支持。顾名思义,这个体系为开发人员提供了一整套用于调试 Java 程序的 API,是一套用于开发 Java 调试工具的接口和协议。本质上说,它是我们通向虚拟机,考察虚拟机运行态的一个通道,一套工具。理解这一点对于学习 JPDA 非常重要。
换句话说,通过 JPDA 这套接口,我们就可以开发自己的调试工具。通过这些 JPDA 提供的接口和协议,调试器开发人员就能根据特定开发者的需求,扩展定制 Java 调试应用程序,开发出吸引开发人员使用的调试工具。前面我们提到的 IDE 调试工具都是基于 JPDA 体系开发的,区别仅仅在于它们可能提供了不同的图形界面、具有一些不同的自定义功能。另外,我们要注意的是,JPDA 是一套标准,任何的 JDK 实现都必须完成这个标准,因此,通过 JPDA 开发出来的调试工具先天具有跨平台、不依赖虚拟机实现、JDK 版本无关等移植优点,因此大部分的调试工具都是基于这个体系的。
以上是 深入Java调试体系: 第1部分,JPDA体系概览 的全部内容, 来源链接: utcz.com/p/205052.html