Java 调试技术 JPDA 架构解读

JPDA(Java Platform Debugger Architecture)是Java官方为代码调试设计的架构,包括JVMTI、JDWP和JDI三个层次。JVMTI提供了与JVM交互的接口,JDWP定义了通信协议,JDI则提供了Java调试接口API。通过JDI,IDE如Eclipse、IntelliJ能以JDWP协议与目标JVM的JVMTI Agent通信,实现远程或本地调试。JPDA允许灵活的集成选择,如直接使用JDI、实现JDWP或直接通过JVMTI。调试器与被调试JVM的通信可通过Socket或共享内存实现,并通过JVM参数配置调试选项。
摘要由CSDN通过智能技术生成

JPDA 概览

JPDA 的全称是 Java Platform Debugger Architecture,它是 Java 官方针对 Java 代码调试所设计的一个机制。在 Oracle 官网上有专门的页面介绍。它属于多层架构,包括:JVMTI 接口规范JDWP 通信规范JDI API 层

JPDA 组成

Debug 应该是每个程序员都经历过的,日常基于 IDE 的开发中,我们可以给某行代码打上断点,然后以 Debug 模式运行程序,程序运行后会在断点处暂停,这时开发者可以安逸地查看此时各个变量的值,也可以在此时加上更多的断点。

  • JVMTI

    Java VM Tool Interface 定义的是一系列跟调试相关的接口,由 VM 实现这些接口。我们所说的程序暂停下来,确实是 JVM 运行代码的时候停在了有断点的地方,那么 JVM 必然提供一种联络方式,让别人告诉它断点在哪个类的第几行。这里的联络方式,就是 JVMTI(JVM Tool Interface),这是 JVM 提供的一个类似钩子的机制,通过 JVMTI,可以指挥 JVM 执行某些操作,例如停在断点处,也可以在 JVM 运行过程中,发生某些事件时,通过钩子通知外部感兴趣的人。

    那么谁可以跟钩子通信呢,并不是说任何人只要有兴趣就行的。JVM 要求它必须是一个 JVMTI Agent,Java 在不同的操作系统中,都已经内置了本地 JVMTI Agent。在 Windows 系统中,这个 JVMTI Agent 就是一个 DLL 文件,在类 Unix 的操作系统中,则是一个 SO 文件。JVMTI Agent 与 JVM 是运行在同一个机器上同一个进程内的。

  • JDWP

    当想要利用 JVMTI 让 JVM 做一些事的时候,那么就要先要与 Agent 通信,由它代为传话。因此,JVMTI Agent 内置了一个称之为“通信后端”的模块,用来接收外部的请求。

    想要与 JVMTI Agent 通信的第三方,就要先与通信后端通信,通信就意味着必然有一个通信协议的存在,这个协议就是 JDWP(Java Debug Wire Protocol) 协议。

  • JDI

    Java 程序员经常使用的 eclipse、idea 这样的 IDE 来 debug 程序的时候,就是以 JDWP 协议与目标 JVM 的 JVMTI Agent 通信的。考虑到 JDWP 协议的实现比较繁琐,Java 官方也在 com.s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值