没有合适的资源?快使用搜索试试~ 我知道了~
首页深入Java调试体系(JPDA-JDWP)
深入Java调试体系(JPDA-JDWP)
需积分: 46 21 下载量 21 浏览量
更新于2023-05-26
收藏 485KB DOC 举报
JPDA(Java Platform Debugger Architecture)是 Java 平台调试体系结构的缩写,通过 JPDA 提供的 API,开发人员可以方便灵活的搭建 Java 调试应用程序。 JPDA 主要由三个部分组成:Java 虚拟机工具接口(JVMTI),Java 调试线协议(JDWP),以及 Java 调试接口(JDI),本系列将会详细介绍这三个模块的内部细节、通过实例为读者揭开 JPDA 的面纱。
资源详情
资源推荐
深入 Java 调试体系: 第 1 部分,JPDA 体系概览
()是 平台调试体系结构
的缩写,通过 提供的 ,开发人员可以方便灵活的搭建 调试应用
程序。 主要由三个部分组成:虚拟机工具接口(),调
试线协议(),以及 调试接口(),本系列将会详细介绍这三
个模块的内部细节、通过实例为读者揭开 的面纱。本文是该系列的第一
篇,将会着重从整体上介绍 的各个组成,阐述它们彼此之间的内在关联。
概述
所有的程序员都会遇到 ,对于运行态的错误,我们往往需要一些方法来观
察和测试运行态中的环境。在 程序中,最简单的,您是否尝试过使用
!来输出您的 程序的执行中的各种变量状态来发现
您的 程序运行时的问题?这种方式方便易用,在一些简单的情况下能够
解决您的问题,但是如果当您的程序运行在远程环境上,或者当前环境不允许
控制台终端输出(比 如,考虑一下虚拟机初始化之时),您无法获取终端输出
的时候呢?或者,如果您根本无法本地修改运行您的程序?
无须担心,您可以通过很多的调试工具来帮助您解决这个问题,常见的 "都
附带一个非常直观简单的调试工具,比如 "(图 #)就提供一个功能非
常全面,操作非常简单的调试器。
图 #使用 "调试 程序
其他的一些常见的 ",比如 $和 等等也都提供了类似
的功能,您甚至能不用 "提供的图形界面,使用 %自带的 &'工具,以
文本命令的形式来调试您的 程序。这些形形色色的调试器都支持本地和
远程的程序调试,那么它们是如何被开发的?它们之间存在着什么样的联系呢?
我们不得不提及 的调试体系—— 。
我们知道,程序都是运行在 虚拟机上的,我们要调试 程序,
事实上就需要向 虚拟机请求当前运行态的状态,并对虚拟机发出一定的
指令,设置一些回调等等,那么 的调试体系,就是虚拟机的一整套用于
调试的工具和接口。
对于 虚拟机接口熟悉的人来说,您一定还记得 提供了两个接口体系,
(()和 (
),而它们,以及在 ")中准备代替它们
的 (),都是 平台调试体
系(,)的重要组成部分。
"自 #**版就开始推出 平台调试体系结构()工具集,而
从 %#+,开始,%就提供了对 平台调试体系结构的直接支
持。顾名思义,这个体系为开发人员提供了一整套用于调试 程序的
,是一套用于开发 调试工具的接口和协议。本质上说,它是我们通向
虚拟机,考察虚拟机运行态的一个通道,一套工具。理解这一点对于学习
非常重要。
换句话说,通过 这套接口,我们就可以开发自己的调试工具。通过这些
提供的接口和协议,调试器开发人员就能根据特定开发者的需求,扩展
定制 调试应用程序,开发出吸引开发人员使用的调试工具。前面我们提
到的 "调试工具都是基于 体系开发的,区别仅仅在于它们可能提供了
不同的图形界面、具有一些不同的自定义功能。另外,我们要注意的是,
是一套标准,任何的 %实现都必须完成这个标准,因此,通过 开发出
来的调试工具先天具有跨平台、不依赖虚拟机实现、%版本无关等移植优点,
因此大部分的调试工具都是基于这个体系的。
组成模块
定义了一个完整独立的体系,它由三个相对独立的层次共同组成,而且
规定了它们三者之间的交互方式,或者说定义了它们通信的接口。这三个层次
由低到高分别是 虚拟机工具接口(),调试线协议()
以及 调试接口()。这三个模块把调试过程分解成几个很自然的概念:
调试者(')和被调试者('),以及他们中间的通信器。
被调试者运行于我们想调试的 虚拟机之上,它可以通过 这个标准
接口,监控当前虚拟机的信息;调试者定义了用户可使用的调试接口,通过这
些接口,用户可以对被调试虚拟机发送调试命令,同时调试者接受并显示调试
结果。在调试者和被调试着之间,调试命令和调试结果,都是通过 的通
讯协议传输的。所有的命令被封装成 命令包,通过传输层发送给被调试
者,被调试者接收到 命令包后,解析这个命令并转化为 的调用,
在被调试者上运行。类似的,的运行结果,被格式化成 数据包,
发送给调试者并返回给 调用。而调试器开发人员就是通过 得到数据,
发出指令。图 *展示了这个过程:
图 *模块层次
当然,开发人员完全可以不使用完整的三个层次,而是基于其中的某一个层次
开发自己的应用。比如您完全可以仅仅依靠通过 函数开发一个调试工具,
而不使用 和 ,只使用自己的通讯和命令接口。当然,除非是有特殊
的需求,利用已有的实现会使您事半功倍,避免重复发明轮子。
这三个模块我们会在后续文章中分别详细介绍,这里我们简单介绍它们的主要
功能:
虚拟机工具接口()
()即指 虚拟机工具接口,
它是一套由虚拟机直接提供的 接口,它处于整个 体系的最底层,
所有调试功能本质上都需要通过 来提供。通过这些接口,开发人员不仅
调试在该虚拟机上运行的 程序,还能查看它们运行的状态,设置回调函
数,控制某些环境变量,从而优化程序性能。我们知道,的前身是
和 ,它们原来分别被用于提供调试 程序以及 程序调
节性能的功能。在 *")-之后 %取代了 和 这两套接口,
在最新的 ".中已经不提供支持,而 也计划在 "
/后被彻底取代。
调试线协议()
()是一个为 调试而设计的一个通讯
交互协议,它定义了调试器和被调试程序之间传递的信息的格式。在 体
系中,作为前端(0')的调试者(')进程和后端(10
')的被调试程序(')进程之间的交互数 据的格式就是由
来描述的,它详细完整地定义了请求命令、回应数据和错误代码,保证了前端
和后端的 和 的通信通畅。比如在 公司提供的实现中,它提供
了一个名为 &'2'(&'2)的动态链接库文件,这个动态库文件实现了
一个 ,它会负责解析前端发出的请求或者命令,并将其转化为
调用,然后将 函数的返回值封装成 数据发还给后端。
另外,这里需要注意的是 本身并不包括传输层的实现,传输层需要独立
实现,但是 包括了和传输层交互的严格的定义,就是说,协议虽
然不规定我们是通过 "还是快递运送货物的,但是它规定了我们传送的货
物的摆放的方式。在 公司提供的 %中,在传输层上,它提供了 1
方式,以及在 '2上的 '方式。当然,传输层本身无
非就是本机内进程间通信方式和远端通信方式,用户有兴趣也可以按 的
标准自己实现。
调试接口()
()是三个模块中最高层的接口,在多数的 %中,
它是由 语言实现的。 由针对前端定义的接口组成,通过它,调试工
具开发人员就能通过前端虚拟机上的调试器来远程操控后端虚拟机上被调试程
序的运行,不仅能帮助开发人员格式化 数据,而且还能为 数
据传输提供队列、缓存等优化服务。从理论上说,开发人员只需使用 和
即可支持跨平台的远程调试,但是直接编写 程序费时费力,而且
效率不高。因此基于 的 层的引入,简化了操作,提高了开发人员开
发调试程序的效率。
表 #总结了三个模块的不同点:
表 #层次比较
模块 层次 编程语言 作用
底层
3
获取及控制当前虚拟机状态
中介层
3
定义 和 交互的数据格式
高层
提供 来远程控制被调试虚拟机
实现
每一个虚拟机都应该实现 接口,但是 和 本身与虚拟机并非
是不可分的,这三个层之间是通过标准所定义的交互的接口和协议联系起来的,
因此它们可以被独立替换或取代,但不会影响到整体调试工具的开 发和使用。
因此,开发和使用自己的 和 接口实现是可能的。
软件开发包(%)标准版里提供了 三个层次的标准实现,事实上,
调试工具开发人员还有很多其他开源实现可以选择,比如 4
提供了 的实现。而 ,我们可以在 "一个子项目
&''里找到其完整的实现(4也使用了这套实现,
作为其 *"类库的一部分)。通过标准协议,""的调试工具就可
以完全在 4的环境上运行。
调试接口的特点
语言是第一个使用虚拟机概念的流行的编程语言,正是因为虚拟机的存在,
使很多事情变得简单而轻松,掌握了虚拟机,就掌握了内存分配、线程管理、
即时优化等 等运行态。同样的,调试的本质,就是和虚拟机打交道,通
过操作虚拟机来达到观察调试我们自己代码的目的。这个特点决定了 调
试接口和以前其他编程语言的巨大区别。
以 35366的调试为例,目前比较流行的调试工具是 78和微软的
'自带的 ',在这种 '中,首先,我们必须编译一个“
'9模式的程序,这个会比实际的 模式程序大很多。其次,在调
试过程中,'将会深层接入程序的运行,掌握和控制运行态的一些信
息,并将这些信息及时返回。这种介入对运行的效率和内存占用都有一定的需
剩余45页未读,继续阅读
JOYFUL001
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 广东石油化工学院机械设计基础课程设计任务书(二).docx
- 数控车床操作工技师理论知识复习题.docx
- 广州数控gsk980td车床数控系统详细对刀方法[1].docx
- 基于SolidWorks的注塑模具CAD系统设计.docx
- 基于柴油机拆装的零件设计与数控编程说明书.docx
- 单凹机常见机械故障分析.docx
- 数控宏程序教程车床篇.docx
- 摩托车启动电机壳体冲压工艺及模具设计.docx
- 数控技能大赛数控铣加工中心软件应用竞赛模拟题.docx
- 基于柴油机拆装的零件设计和数控编程.docx
- 华中数控综合试验台实验指导书.docx
- 叉形支架机械工艺规程设计.docx
- springboot+vue“智慧食堂”设计与实现springboot002.docx
- DH1765-3-北京大华单路程控直流电源用户协议手册,USB驱动,开发手册
- 数控车床零件程序编制及模拟加工实训.docx
- 数控设备的安装调试.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功