Java远程调试

环境:

1.eclipse3.4及以上版本

NetBeans 5.x及以上版本

IntelliJ IDEA等

2.jdk5及以上版本

名词解释:

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

2.JVMTI(JVM Tool Interface):Java 虚拟机工具接口,JDK提供的一套用于开发JVM监控, 问题定位与性能调优工具的通用编程接口。JVMTI 的前身是 JVMDI 和 JVMPI。

3.JDWP(Java Debug Wire Protocol):Java 调试线协议,是一个为 Java 调试而设计的一个通讯交互协议,它定义了调试器和被调试程序之间传递的信息的格式。在 JPDA 体系中,作为前端(front-end)的调试者(debugger)进程和后端(back-end)的被调试程序(debuggee)进程之间的交互数据的格式就是由 JDWP 来描述的,它详细完整地定义了请求命令、回应数据和错误代码,保证了前端和后端的 JVMTI 和 JDI 的通信通畅。

4.JDI(Java Debug Interface):是 JPDA 三层模块中最高层的接口,定义了调试器(Debugger)所需要的一些调试接口。基于这些接口,调试器可以及时地了解目标虚拟机的状态,例如查看目标虚拟机上有哪些类和实例等。另外,调试者还可以控制目标虚拟机的执行,例如挂起和恢复目标虚拟机上的线程,设置断点等。

5.JVMPI(Java Virtual Machine Profiler Interface):可以监控JVM发生的各种事件。例如当JVM创建,关闭,Java类被加载,创建对象,或GC回收,等37种事件。

6.JVMDI(Java Virtual Machine Debug Interface):Java 虚拟机调试接口。

JVMTI的前身为JVMPI及JVMDI,Java5.0中这两套接口已被JVMTI取代,JVMDI在java6中已经不支持,JVMPI在Java7中将彻底不存在。

JPDA简介:

Java 平台调试器架构

Components Debugger Interfaces

​ / |--------------|

​ / | VM |

debuggee -----( |--------------| <---- JVMTI - Java VM Tool Interface

​ \ | back-end |

​ \ |--------------|

​ / |

comm channel --( | <------------ JDWP - Java Debug Wire Protocol

​ \ |

​ / |--------------|

​ / | front-end |

debugger -----( |--------------| <---- JDI - Java Debug Interface

​ \ | UI |

​ \ |--------------|

debuggee为被调试者,即我们想要调试的jvm。

debugger为调试者,即jdi的实现,例如eclipse的org.eclipse.jdt.debug等工具。

jdwp为传输协议,定义debuggee和debugger之间的数据传输格式,但并不包括传输层的实现,具体采用什么方式传输数据需要独立实现,Sun的JDK中数据传输提供了两种方式:socket、shared memory(仅widows下可用)

远程调试参数:

-Xdebug

启用调试特性。

-Xrunjdwp:

在目标 VM 中加载 JDWP 实现。它通过传输和 JDWP 协议与独立的调试器应用程序通信。下面介绍一些特定的子选项。

从 Java V5 开始,您可以使用 -agentlib:jdwp 选项,而不是 -Xdebug 和 -Xrunjdwp。但如果连接到 V5 以前的 VM,只能选择 -Xdebug 和 -Xrunjdwp。下面简单描述 -Xrunjdwp 子选项。

transport

这里通常使用套接字传输。但是在 Windows 平台上也可以使用共享内存传输。

server

如果值为 y,目标应用程序监听将要连接的调试器应用程序。否则,它将连接到特定地址上的调试器应用程序。

address

这是连接的传输地址。如果服务器为 n,将尝试连接到该地址上的调试器应用程序。否则,将在这个端口监听连接。

suspend

如果值为 y,目标 VM 将暂停,直到调试器应用程序进行连接。

例子:

作为调试服务器的目标 VM

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8765

作为调试客户机的目标 VM

-Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8765

JPDA 层次比较

模块 层次 编程语言 作用

JVMTI 底层 C 获取及控制当前虚拟机状态

JDWP 中介层 C 定义 JVMTI 和 JDI 交互的数据格式

JDI 高层 Java 提供 Java API 来远程控制被调试虚拟机

总结:

JPDA 定义了一套如何开发调试工具的接口和规范。

JPDA 由三个独立的模块 JVMTI、JDWP、JDI 组成。

调试者通过 JDI 发送接受调试命令。

JDWP 定义调试者和被调试者交流数据的格式。

JVMTI 可以控制当前虚拟机运行状态。

除了标准实现,JPDA 还有许多开源实现供使用(Apache Harmony、org.eclipse.jdt.debug)。

Java 调试工具的优点。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值