- 环境:
- eclipse3.4及以上版本、NetBeans 5.x及以上版本、IntelliJ IDEA等
- jdk5及以上版本
- 名词解释:
- JPDA(Java Platform Debugger Architecture): Java 平台调试体系结构的缩写,通过 JPDA 提供的 API,开发人员可以方便灵活的搭建 Java 调试应用程序。JPDA 主要由三个部分组成:Java 虚拟机工具接口(JVMTI),Java 调试线协议(JDWP),以及 Java 调试接口(JDI)
- JVMTI(JVM Tool Interface):Java 虚拟机工具接口,JDK提供的一套用于开发JVM监控, 问题定位与性能调优工具的通用编程接口。JVMTI 的前身是 JVMDI 和 JVMPI。
- JDWP(Java Debug Wire Protocol):Java 调试线协议,是一个为 Java 调试而设计的一个通讯交互协议,它定义了调试器和被调试程序之间传递的信息的格式。在 JPDA 体系中,作为前端(front-end)的调试者(debugger)进程和后端(back-end)的被调试程序(debuggee)进程之间的交互数据的格式就是由 JDWP 来描述的,它详细完整地定义了请求命令、回应数据和错误代码,保证了前端和后端的 JVMTI 和 JDI 的通信通畅。
- JDI(Java Debug Interface):是 JPDA 三层模块中最高层的接口,定义了调试器(Debugger)所需要的一些调试接口。基于这些接口,调试器可以及时地了解目标虚拟机的状态,例如查看目标虚拟机上有哪些类和实例等。另外,调试者还可以控制目标虚拟机的执行,例如挂起和恢复目标虚拟机上的线程,设置断点等。
- JVMPI(Java Virtual Machine Profiler Interface):可以监控JVM发生的各种事件。例如当JVM创建,关闭,Java类被加载,创建对象,或GC回收,等37种事件。
- 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:<sub-options>
在目标 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)。
- 参考及扩展资料:
使用 Eclipse 远程调试 Java 应用程序
http://www.ibm.com/developerworks/cn/opensource/os-eclipse-javadebug/
使用Netbeans远程调试Java应用程序
http://wiki.netbeans.org/FaqDebuggingRemote
使用 intellij idea 进行远程调试
http://yiminghe.iteye.com/blog/1027707
深入 Java 调试体系系列文章(共4部分):
http://www.ibm.com/developerworks/cn/java/j-lo-jpda1/
基于 JVMTI 实现 Java 线程的监控
http://www.ibm.com/developerworks/cn/java/j-lo-jvmti/
相关推荐
如果你发现你的代码在本地运行良好,但是一旦上测试环境、预发布环境或生产环境就出现问题,那么可以执行JAVA远程调试,以彻底搞清楚为什么一上生产环境就会出现问题,本教程就是介绍如何实现JAVA远程调试,即如何在...
### Java远程调试操作步骤 #### 一、准备工作 在进行Java远程调试之前,我们需要完成一些必要的准备工作,确保环境配置正确。 ##### 1.1 安装JCE无限制策略文件 根据描述中的“下载UnlimitedJCEPolicyJDK8”,这...
### Java远程调试详解 在软件开发领域,尤其是大型分布式系统或微服务架构中,Java远程调试是一项关键技能,它允许开发者在本地机器上调试运行在远程服务器上的Java应用程序,极大地提高了问题定位和解决效率。本文...
Java远程调试是指在开发过程中,开发人员能够通过网络连接到远程机器上运行的Java应用程序进行调试的过程。这种方式可以有效解决由于部署环境差异导致的问题定位困难,尤其是在分布式系统和微服务架构中,远程调试更...
Java远程调试是一项强大的技术,它允许开发者在不同的设备或服务器上对Java应用程序进行调试,而无需实际坐在该设备前。这份“Java远程调试PPT”深入浅出地讲解了这一主题,包括JVM的调试模型、Eclipse的调试技巧、...
在开发过程中,远程调试是解决生产环境中问题的重要手段。本篇文章将详细讲解如何在Eclipse中设置和使用远程调试Java代码。 首先,我们需要理解远程调试的基本原理。远程调试允许开发者在本地IDE上对运行在另一台...
本文档旨在详细介绍如何在 JavaEclipse 环境下配置 Windchill 进行远程调试的过程。远程调试是指在一个主机上调试运行在另一台机器上的应用程序的技术。这对于分布式系统的开发尤其有用,因为它允许开发者在不同的...
在IT行业中,开发人员经常需要面对复杂的问题,这时远程调试技术就显得尤为重要。... 首先,让我们了解一下什么是远程...通过阅读《PHP,Java远程调试教程.docx》这份文档,相信你会得到更具体的步骤指导和实践经验分享。
### JAVA远程调试详解 在开发过程中,特别是在分布式系统或微服务架构中,远程调试成为解决复杂问题的关键技术之一。本文将详细介绍如何通过JAVA进行远程调试,包括配置环境、启动调试服务器以及连接远程调试客户端...
NC Eclipse 远程调试是指在 Eclipse 集成开发环境中,使用 Java Debug Wire Protocol (JDWP) 实现远程调试 Java 应用程序的功能。JDWP 是一个基于 socket 的通信协议,用于在 debug 客户端和服务器之间传输调试信息...
### Java开发环境Eclipse远程调试端口配置 #### 运行环境配置 为了实现Java Eclipse远程调试功能,首先需要确保本地开发环境与远程服务器环境之间的兼容性和一致性。具体步骤如下: 1. **运行ncSysconfig命令**:...
解决Failed to connect to remote VM com.sun.jdi.connect.spi.ClosedConnectionException错误,tomcat远程调试
以下将详细介绍如何进行Java远程调试以及在远程服务器上设置断点。 首先,理解远程调试的基本原理是关键。Java提供了Java Debug Wire Protocol (JDWP) 来支持远程调试。JDWP是一个协议,使得调试器能够与Java虚拟机...
在Java开发过程中,远程调试是一项非常实用的功能,它允许开发者在不访问服务器本地环境的情况下,对运行在远程服务器上的应用程序进行调试。对于IntelliJ IDEA(Idea)用户,这个过程可以通过几步简单设置来实现。...
MyEclipse作为一款强大的Java集成开发环境,提供了远程调试功能,使得开发者能够远程连接到运行在其他机器上的应用,进行实时的代码调试。下面我们将详细讲解MyEclipse远程调试的配置方法及其相关知识点。 1. **...
NC开发环境远程调试端口配置是指在NC开发环境中配置远程调试端口,以便在开发过程中进行调试和故障排除。下面是相关的知识点: 一、运行环境配置 * 在NC开发环境中,需要在./ncSysconfig文件中修改JVM参数,以便...
本文将详细介绍 Windchill 远程调试的配置和实现过程。 一、Windchill 远程调试概述 Windchill 远程调试是指在 Windchill 开发环境中,使用 Java 平台调试器(JPDA)来调试远程服务器上的 Java 应用程序。JPDA...
在Java编程过程中,遇到程序出错或运行异常时,调试是找出问题源头的关键步骤。本文将详细介绍Java调试的一些核心技术和方法。 首先,Java调试的基础是JVM(Java虚拟机)提供的调试接口JDWP(Java Debug Wire ...
在开发过程中,远程调试是一项非常重要的功能,尤其是在部署到服务器环境后进行调试时,能够直接在服务器上进行调试可以极大地提高开发效率。本文将详细介绍如何配置 Eclipse 来实现 Spring Boot 的远程调试。 ####...
本文将详细解释远程调试方法中的参数配置,尤其是针对使用Tomcat服务器进行Java远程调试的情况。 #### 远程调试基本概念 远程调试是指通过网络连接,在本地计算机上控制并调试运行在远程服务器上的程序。这种方式...