欢迎来到天天文库
浏览记录
ID:21929996
大小:457.00 KB
页数:45页
时间:2018-10-25
《深入java调试体系(jpda,jdwp)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、深入Java调试体系:第1部分,JPDA体系概览JPDA(JavaPlatformDebuggerArchitecture)是Java平台调试体系结构的缩写,通过JPDA提供的API,开发人员可以方便灵活的搭建Java调试应用程序。JPDA主要由三个部分组成:Java虚拟机工具接口(JVMTI),Java调试线协议(JDWP),以及Java调试接口(JDI),本系列将会详细介绍这三个模块的内部细节、通过实例为读者揭开JPDA的面纱。本文是该系列的第一篇,将会着重从整体上介绍JPDA的各个组成,阐述它们彼此之间的内在关联。JPDA概述所有的程序员都会遇到bug,
2、对于运行态的错误,我们往往需要一些方法来观察和测试运行态中的环境。在Java程序中,最简单的,您是否尝试过使用System.out.println()来输出您的Java程序的执行中的各种变量状态来发现您的Java程序运行时的问题?这种方式方便易用,在一些简单的情况下能够解决您的问题,但是如果当您的程序运行在远程环境上,或者当前环境不允许控制台终端输出(比如,考虑一下虚拟机初始化之时),您无法获取终端输出的时候呢?或者,如果您根本无法本地修改运行您的程序?无须担心,您可以通过很多的调试工具来帮助您解决这个问题,常见的IDE都附带一个非常直观简单的调试工具,比如E
3、clipse(图1)就提供一个功能非常全面,操作非常简单的调试器。图1.使用Eclipse调试Java程序其他的一些常见的JavaIDE,比如Netbeans和IntelliJ等等也都提供了类似的功能,您甚至能不用IDE提供的图形界面,使用JDK自带的jdb工具,以文本命令的形式来调试您的Java程序。这些形形色色的调试器都支持本地和远程的程序调试,那么它们是如何被开发的?它们之间存在着什么样的联系呢?我们不得不提及Java的调试体系——JPDA。我们知道,Java程序都是运行在Java虚拟机上的,我们要调试Java程序,事实上就需要向Java虚拟机请求当前运
4、行态的状态,并对虚拟机发出一定的指令,设置一些回调等等,那么Java的调试体系,就是虚拟机的一整套用于调试的工具和接口。对于Java虚拟机接口熟悉的人来说,您一定还记得Java提供了两个接口体系,JVMPI(JavaVirtualMachineProfilerInterface)和JVMDI(JavaVirtualMachineDebugInterface),而它们,以及在JavaSE5中准备代替它们的JVMTI(JavaVirtualMachineToolInterface),都是Java平台调试体系(JavaPlatformDebuggerArchitec
5、ture,JPDA)的重要组成部分。JavaSE自1.2.2版就开始推出Java平台调试体系结构(JPDA)工具集,而从JDK1.3.x开始,JavaSDK就提供了对Java平台调试体系结构的直接支持。顾名思义,这个体系为开发人员提供了一整套用于调试Java程序的API,是一套用于开发Java调试工具的接口和协议。本质上说,它是我们通向虚拟机,考察虚拟机运行态的一个通道,一套工具。理解这一点对于学习JPDA非常重要。换句话说,通过JPDA这套接口,我们就可以开发自己的调试工具。通过这些JPDA提供的接口和协议,调试器开发人员就能根据特定开发者的需求,扩展定制J
6、ava调试应用程序,开发出吸引开发人员使用的调试工具。前面我们提到的IDE调试工具都是基于JPDA体系开发的,区别仅仅在于它们可能提供了不同的图形界面、具有一些不同的自定义功能。另外,我们要注意的是,JPDA是一套标准,任何的JDK实现都必须完成这个标准,因此,通过JPDA开发出来的调试工具先天具有跨平台、不依赖虚拟机实现、JDK版本无关等移植优点,因此大部分的调试工具都是基于这个体系的。JPDA组成模块JPDA定义了一个完整独立的体系,它由三个相对独立的层次共同组成,而且规定了它们三者之间的交互方式,或者说定义了它们通信的接口。这三个层次由低到高分别是Jav
7、a虚拟机工具接口(JVMTI),Java调试线协议(JDWP)以及Java调试接口(JDI)。这三个模块把调试过程分解成几个很自然的概念:调试者(debugger)和被调试者(debuggee),以及他们中间的通信器。被调试者运行于我们想调试的Java虚拟机之上,它可以通过JVMTI这个标准接口,监控当前虚拟机的信息;调试者定义了用户可使用的调试接口,通过这些接口,用户可以对被调试虚拟机发送调试命令,同时调试者接受并显示调试结果。在调试者和被调试着之间,调试命令和调试结果,都是通过JDWP的通讯协议传输的。所有的命令被封装成JDWP命令包,通过传输层发送给被调
8、试者,被调试者接收到JDWP命令包后,
此文档下载收益归作者所有