文档章节

Java远程调试笔记

xie_ping
 xie_ping
发布于 2016/07/23 17:33
字数 1258
阅读 29
收藏 0

环境:

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      |
                 \    |--------------|        
<file://D:/Program Files/ToDoList/list/jdwp.jpg>
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)。
Java 调试工具的优点。

参考资料:

1.使用 Eclipse 远程调试 Java 应用程序
http://www.ibm.com/developerworks/cn/opensource/os-eclipse-javadebug/
2.使用Netbeans远程调试Java应用程序
http://wiki.netbeans.org/FaqDebuggingRemote
3.使用 intellij idea 进行远程调试
http://yiminghe.iteye.com/blog/1027707
4.深入 Java 调试体系系列文章(共4部分):
http://www.ibm.com/developerworks/cn/java/j-lo-jpda1/
5.基于 JVMTI 实现 Java 线程的监控
http://www.ibm.com/developerworks/cn/java/j-lo-jvmti/

© 著作权归作者所有

xie_ping
粉丝 0
博文 5
码字总数 4661
作品 0
长沙
程序员
私信 提问
eclipse远程debug,java项目

首先java项目要支付可远程调试得到启动时加入参数 启动远程调试 启用JMX,远程性能观察 eclipse配置 其中:host为远程java程序提供远程调试的IP,post为远程java程序提供远程调试的端口 使用 ...

有事没事
2014/12/05
0
0
TProfiler部署文档--笔记

TProfiler是一个可以在生产环境长期使用的性能分析工具.它同时支持剖析和采样两种方式,记录方法执行的时间和次数,生成方法热点 对象创建热点 线程状态分析等数据,为查找系统性能瓶颈提供数据...

山哥
2014/03/21
0
0
Eclipse 远程调试 Java 程序

今天同事问我怎么远程调试 java 程序。我不会,那马上搜索看看。在被高度的程序中加个数据就行。然后 eclipse 调试时指定端口就行,太方便了。 比如,现在有一个代码: 把这个java 导出为 re...

鉴客
2010/08/05
1K
1
weblogic debug配置

1.1. 软件环境 Eclipse 3.1 Weblogic 8.1 1.2. 工作原理 远程调试就是允许利用 java tools 里面的jdb 程序连接远程的JAVA虚拟机,进行远程debug ,同时远程的虚拟机启动时候需要开启 debug ...

ianLi
2012/11/02
0
0
Eclipse远程调试Tomcat

最近,一直在研究Tomcat的工作内幕,主要的方法就是参考《How Tomcat Works》 这本书和Tomcat 5.5.26的源代码。 Tomcat的代码结构还是比较清晰的,注释也比较全。但是代码毕竟是静态的,难以...

一枚Sir
2014/08/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JWT学习总结

官方 https://jwt.io 英文原版 https://www.ietf.org/rfc/rfc7519.txt 或 https://tools.ietf.org/html/rfc7519 中文翻译 https://www.jianshu.com/p/10f5161dd9df 1. 概述 JSON Web Token(......

冷基
今天
4
0
AOP的学习(1)

AOP 理解AOP编程思想(面向方法、面向切面) spring AOP的概念 方面 -- 功能 目标 -- 原有方法 通知 -- 对原有方法增强的方法 连接点 -- 可以用来连接通知的地方(方法) 切入点 -- 将用来插入...

太猪-YJ
今天
4
0
一张图看懂亮度、明度、光度、光亮度、明亮度

亮度、明度、光亮度,Luminance和Brightness、lightness其实都是一个意思,只是起名字太难了。 提出一个颜色模型后,由于明度的取值与别人的不同,为了表示区别所以就另想一个词而已。 因此在...

linsk1998
昨天
11
0
Python应用:python链表示例

前言 python链表应用源码示例,需要用到python os模块方法、函数和类的应用。 首先,先简单的来了解下什么是链表?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是...

python小白1
昨天
5
0
Source Insight加载源码

Source Insight是一个图形化的源代码查看工具(当然也可以作为编译工具)。如果一个项目的源代码较多,此工具可以很方便地查找到源代码自建的依赖关系。 1.创建工程 下图为Snort源代码的文件...

天王盖地虎626
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部