探究JPDA架构第17期:深入理解JDI概览
最编程
2024-07-23 19:48:55
...
引入:
前面用了很多篇幅来讨论JVMTI和JDWP部分,现在终于来看最靠近用户端部分了,JDI。
分析:
a. JDI的基础知识
和JVMTI和JDWP不一样的是,JDI提供了一组接口,这些接口是纯JAVA编写的。他们主要是给开发环境IDE用的,虽然调试器的实现可以直接利用JDWP或者JVMTI,但是多了这一层则可以从用户的代码级别来定义要发送的请求和获取的信息。
本质上,Eclipse的调试器与目标VM之间的双向通信如下:
调试器将用户的操作转化为调试命令,命令通过链接被发送到前端运行目标程序的虚拟机上;然后,目标虚拟机根据接受的命令做出相应的操作,将调试的结果发回给后端的调试器;最后,调试器可视化数据信息反馈给用户。
JDI接口定义在$JAVA_HOME/lib/tools.jar中,从宏观上看,它分为5个大包。
包名 |
描述 |
com.sun.jdi |
这是JDI的核心包,它提供了镜像机制将目标虚拟机上的所有数据、类型、域、方法、事件、状态和资源,以及调试器发向目标虚拟机的事件请求等都映射成 Mirror 对象 |
com.sun.jdi.connect |
该包用于定义JDI到目标虚拟机的连接 |
com.sun.jdi.connect.spi |
该包用于定义开发TransportService(也就是前面我在JDWP层讨论很深的传输器服务)所需要的必要的类和接口。 |
com.sun.jdi.event |
该包定义了JDI事件和事件处理 |
com.sun.jdi.request |
该包用于发送JDI事件然后在一定条件下发送。 |
b.JDI的具体实现
以Eclipse为例:
org.eclipse.jdt.debug 是 JDI 的一个完整实现,而org.eclipse.jdt.debug.ui 是 Eclipse 调试工具界面的实现。从包名上看,我们大体上把JDI 分成三个部分:
(1)数据模块。它负责调试器(Debugger)和目标虚拟机上(Target VM)的数据建模。
(2)链接模块。它建立调试器(Debugger)与目标虚拟机(Target VM)的沟通渠道。
(3)事件请求与处理模块。它提供调试器(Debugger)与目标虚拟机(VM)之间的交互方式。
我们会在接下来的几篇文章中从Eclipse的代码级别来分析这些模块。
推荐阅读
-
【2022新手指南】Java编程进阶之路 - 六、技术架构篇 ### MySQL索引底层解析与优化实战 - 你会讲解MySQL索引的数据结构吗?性能调优技巧知多少? - Redis深度揭秘:你知道多少?从基础到哨兵、主从复制全梳理 - Redis持久化及哨兵模式详解,还有集群搭建和Leader选举黑箱打开 - Zookeeper是个啥?特性和应用场景大公开 - ZooKeeper集群搭建攻略及 Leader选举、读写一致性、共享锁实现细节 - 探究ZooKeeper中的Leader选举机制及其在分布式环境中的作用 - Zab协议深入剖析:原理、功能与在Zookeeper中的核心地位 - RabbitMQ全方位解读:工作模式、消费限流、可靠投递与配置策略 - 设计者视角:RabbitMQ过期时间、死信队列与延时队列实践指南 - RocketMQ特性和应用场景揭示:理解其精髓与差异化优势 - Kafka详细介绍:特性及广泛应用于实时数据处理的场景解析 - ElasticSearch实力揭秘:特性概述与作为搜索引擎的广泛应用 - MongoDB认知升级:非关系型数据库的优势阐述,安装与使用实战教学 - BIO/NIO/AIO网络模型对比:掌握它们的区别与在网络编程中的实际应用 - Netty带你飞:理解其超快速度背后的秘密,包括线程模型分析 - 网络通信黑科技:Netty编解码原理与常用编解码器的应用,Protostuff实战演示 - 解密Netty粘包与拆包现象,怎样有效应对这一常见问题 - 自定义Netty心跳检测机制,轻松调整检测间隔时间的艺术 - Dubbo轻骑兵介绍:核心特性概览,服务降级实战与其实现益处 - Dubbo三大神器解读:本地存根与本地伪装的实战运用与优势呈现 ----------------------- 七、结语与回顾
-
探究JPDA架构第17期:深入理解JDI概览
-
探究JPDA架构第19期:深入理解JDI连接组件
-
探索JPDA架构系列第18篇:深入理解JDI中的Mirror机制
-
探究JPDA架构第四部分:深入理解JDWP通信传输器的工作机制
-
探究JPDA架构的第20篇章:JDI中的事件请求与处理机制详细解析
-
探究JPDA架构的第20篇章:JDI中的事件请求与处理机制详细解析