JDWP

本文介绍了Java平台调试体系结构(JPDA),包括其组成部分:Java虚拟机工具接口(JVMTI)、Java调试线协议(JDWP)及Java调试接口(JDI)。详细解释了JDWP如何定义调试器(debugger)与目标Java虚拟机(targetvm)之间的通信协议。

 

 

JPDA(Java Platform Debugger Architecture) 是 Java 平台调试体系结构的缩写,通过 JPDA 提供的 API,开发人员可以方便灵活的搭建 Java 调试应用程序。
JPDA 主要由三个部分组成:Java 虚拟机工具接口(JVMTI),Java 调试线协议(JDWP),以及 Java 调试接口(JDI)。

JDWP 是 Java Debug Wire Protocol 的缩写,它定义了调试器(debugger)和被调试的 Java 虚拟机(target vm)之间的通信协议。
JDWP 协议介绍
这里首先要说明一下 debugger 和 target vm。Target vm 中运行着我们希望要调试的程序,它与一般运行的 Java 虚拟机没有什么区别,只是在启动时加载了 Agent JDWP 从而具备了调试功能。
而 debugger 就是我们熟知的调试器,它向运行中的 target vm 发送命令来获取 target vm 运行时的状态和控制 Java 程序的执行。
Debugger 和 target vm 分别在各自的进程中运行,他们之间的通信协议就是 JDWP。
JDWP 与其他许多协议不同,它仅仅定义了数据传输的格式,但并没有指定具体的传输方式。这就意味着一个 JDWP 的实现可以不需要做任何修改就正常工作在不同的传输方式上(在 JDWP 传输接口中会做详细介绍)。
JDWP 是语言无关的。理论上我们可以选用任意语言实现 JDWP。然而我们注意到,在 JDWP 的两端分别是 target vm 和 debugger。
Target vm 端,JDWP 模块必须以 Agent library 的形式在 Java 虚拟机启动时加载,并且它必须通过 Java 虚拟机提供的 JVMTI 接口实现各种 debug 的功能,所以必须使用 C/C++ 语言编写。
而 debugger 端就没有这样的限制,可以使用任意语言编写,只要遵守 JDWP 规范即可。
JDI(Java Debug Interface)就包含了一个 Java 的 JDWP debugger 端的实现(JDI 将在该系列的下一篇文章中介绍),JDK 中调试工具 jdb 也是使用 JDI 完成其调试功能的。

 

http://www.ibm.com/developerworks/cn/java/j-lo-jpda3/index.html

http://blog.youkuaiyun.com/mike_caoyong/article/details/7943458

 

转载于:https://www.cnblogs.com/softidea/p/4262260.html

### 设置和使用JDWP Agent进行Java调试 #### 配置JPDA选项 为了配置JDWP代理以支持Java应用程序的调试,可以通过环境变量或命令行参数指定必要的JPDA选项。对于Windows操作系统,在`setenv.bat`文件中设置如下所示的`JPDA_OPTS`环境变量[^5]: ```batchfile set JPDA_OPTS=-agentlib:jdwp=transport=dt_socket,address=1043,server=y,suspend=n ``` 此配置表示启用JDWP库(`-agentlib:jdwp`)并通过套接字传输协议(`transport=dt_socket`)监听端口1043上的连接请求。 #### 启动带有JDWP的支持的应用程序 当希望在应用启动时就开启远程调试功能时,可以在启动脚本里加入上述定义好的`JPDA_OPTS`变量值作为JVM参数的一部分。这使得任何符合标准的IDE都能够连接至该进程并执行断点、单步执行等操作[^4]。 #### 动态附加JDWP Agent 除了随同JVM一同初始化之外,还可以利用动态方式向正在运行中的进程中注入JDWP agent。不过这种方式通常需要额外编写代码来实现,并不是所有场景都适用[^2]。 #### 调试器客户端连接 一旦服务器端已经准备好接受来自外部源码级工具(如Eclipse、IntelliJ IDEA)发出的数据流之后,开发者便可在本地机器上打开这些集成开发环境中相应的菜单项完成最终链接建立过程。 ```bash # 假设目标主机IP地址为192.168.1.100 jdb -connect com.sun.jdi.SocketAttach:hostname=192.168.1.100,port=1043 ``` 以上就是关于如何针对Java项目配置以及运用JDWP来进行有效诊断的方法概述[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值