- 浏览: 175730 次
- 性别:
- 来自: 苏州
最新评论
-
jsruth:
学习了,请教下使用C3P0连接池,配置好hibernate.c ...
Hibernate 连接池配置(C3PO and proxool) -
oliveevilo:
试了一下后面的mysqldump 也没成功,求指教
MySql 导入和导出xml文件实例 -
oliveevilo:
我使用你这里说的第一种方法为什么不行,我的是mysql 5.6 ...
MySql 导入和导出xml文件实例 -
luofuyong:
很管用,谢谢哦
PLSQL Developer 注册 -
zl0828:
很全,很详细。搞不懂为什么没有人评论支持呢。我来加一把劲,支持 ...
DisplayTag
在无法访问运行中的实例时,调试一个Java程序可能相当麻烦。当应用程序在远程环境下运行,并且不会在控制台或日志文件中输出任何结果时,调试工作变得更加困难。如果你需要对一个运行中的Java应用程序进行全方位调试,Sun的Java平台调试构架(JPDA)可为您提供帮助。 JPDA是一组API集合,旨在帮助你调试Java代码。J2SE自1.2.2版开始推出JPDA工具集,并在1.3.x版中将它直接包含在J2SE软件包中。 JPDA并非一个应用程序或调试工具,而是一组精心设计的接口与协议,了解这点很重要。Sun设计这一标准的目的是提供一个基础构架,以便第三方工具和调整器能够高效利用它。还有许多利用JPDA的优秀调试器和IDE,包括一些获得广泛认可的工具,如Borland JBuilder、Oracle JDeveloper、IntelliJ IDEA、Sun NetBeans、IBM Eclipse等等。不过,Sun在它的传统命令行式调试器jdb中提供了一个参考实例。Java 1.3重新编写了jdb以支持JPDA。在本文中,我将讨论JPDA技术及它的一些实际应用。 什么是JPDA Java Platform Debugger Architecture(JPDA:Java平台调试架构) 由Java虚拟机后端和调试平台前端组成 JPDA的构架 JPDA概念将调试过程分为两部分:被调试的程序(被调试者-debuggee)和JDI。JDI一般为一个调试应用程序的用户接口(或Java IDE的一部分)。被调试的应用程序在后端运行,而JDI在前端运行。在前端与后端之间有一个通信通道运行JDWP协议;因此,被调试程序与调试器可以位于同一个系统内,也可位于不同的系统中。 从开发者的角度,一个调试应用程序可进入任何JPDA层面。因为JDI是最高层,也最容易使用,我们推荐使用这个接口。假设一家公司用JDI开发了一个调试器。公司能够把它用于参考实例中,它将自动与VM和Sun支持的平台协同工作,因此大多数IDE供应商采用这种方式。还可以这样,例如,参考实例在前端运行,被调试者运行另一家公司执行JDWP(它可能运行或忽略JVMTI)的VM。 一些调试器可能建立在较低层面之上,如JDWP(例如,如果Java没有编写前端)或JVMTI(针对需要低级功能的专用调试器)。 调试器的后端负责由调试器前端向被调试者VM传输请求,如“告诉我变量X的值”;它还负责向前端传输对这些请求(包括像到达断点之类的预计事件)的响应。后端与前端利用JDWP通过一个通信通道进行通信。后端与被调试者VM利用JVMTI进行通信。
运行方式 虚拟机参数设置 几个例子 启动tomcat 以上两行是tomcat5.5.12的catalina.bat文件中的一句,可以看出tomcat在JPDA方式下是怎么启动的,启动tomcat要用catalina jpda start来启动,不能用startup.bat启动,启动前设置好JPDA_TRANSPORT,JPDA_ADDRESS就OK了 另有一篇文章http://www.blogcn.com/u2/38/21/ayufox/blog/36956440.html 介绍如何使用Eclipse构建测试平台 本文将介绍使用Eclipse JPDA,在Eclipse的开发环境下对远程运行的Java程序进行调试操作。 linux下的java远程调试jpda+tomcat 项目放到linux服务器了,服务器的环境或者数据可能和我们本地不一样,这个时候我们可能需要远程的断点进行调试,来查看请求过程中的各个变量的值。 这里我们的eclipse就是那个调试的前台。我们需要将本地的调试平台和服务器运行的项目结合起来。 第一步:启动tomcat的jpda支持 默认情况下tomcat的启动命令是: ./catalina.sh start 但是这个命令是没有启动我们的jpda这个服务 我们需要启动jpda服务,好在tomcat提供了集成化的命令:./catalina.sh jpda start,这样就启动了我们服务器jvm的jpda服务了。tomcat默认的jpda服务的端口是8000,这个时候我们使用命令看下 netstat -an,看看8000端口是不是已经启动了。 第二步:从本地建立jpda的断点调试前台 1、在eclipse的“Run”菜单下选择“Debug...”菜单,在弹出的对话框左边的菜单中选择“Remote Java Application”菜单,右键点击,选择“New”,这个时候弹出一个需要填写参数的对话框 2、在弹出的框中,定义项目名称,选择要断点调试的项目,Connect type(默认Standard (Socket Attach)),定义我们的web项目放在哪里(就是我们的远程虚拟机在哪里),填写他的ip以及提供的服务端口号,tomcat的这个版本是8000.最后选择source标签,将项目的源码加入,我这里一般选择add一个java project的方式 3、切换到debug模式下,就能看到debug的相关选项都是激活状态。在本地的source文件中加断点,然后请求服务的链接,看看我们的断点调试是否成功。 以上的操作经过我本人验证过。 很多的服务器都提供这种远程调试的接口服务,所以不要局限于tomcat可用,最主要的区别就是每个服务器提供的jpda的启动方式不同,提供的服务端口不同,这里我们tomcat5.5提供的启动方式是catalia.sh jpda start这种命令行的方式,端口默认用8000。大家在开发的时候按照服务器提供的说明进行调试吧
1.Java虚拟机提供了Java调试的功能
2.调试平台通过调试交互协议向Java虚拟机请求服务以对在虚拟机中运行的程序进行调试
JPDA通过两个接口和协议来完成如上的说明,分别是JVMTI(Java虚拟机工具接口)、JDWP(Java调试连线协议)和JDI(Java调试接口)。
1.JVMTI定义了虚拟机应该提供的调试服务,包括调试信息(Information譬如栈信息)、调试行为(Action譬如客户端设置一个断点)和通知(Notification譬如到达某个断点时通知客户端),该接口由虚拟机实现者提供实现,并结合在虚拟机中
2.JDWP定义调试服务和调试器之间的通信,包括定义调试信息格式和调试请求机制。Java调试线协议(JDWP)定义在调试过程和调试器前端之间传输的信息和请求的格式。它执行Java调试接口(JDI)。
3.JDI在语言的高层次上定义了调试者可以使用的调试接口以能方便地与远程的调试服务进行交互,Java语言实现,调试器实现者可直接使用该接口访问虚拟机调试服务。JDI定义用户代码级信息和请求。
当虚拟机的调试服务运行时,虚拟机作为调试的服务提供端,监听一个连接,而调试器通过该连接与虚拟机进行交互。目前,Windows平台的JVM提供了两种方式的连接:共享内存和 Socket连接,共享内存的服务提供端和调试端只能位于同一台机,而Socket连接则支持不同异机调试,即远程调试。
1.启用调试服务
-Xdebug 启用调试
-Xrunjdwp:<sub-options> 加载JVM的JPDA参考实现库
2.Xrunjdwp子参数(sub-options)配置
Xrunjdwp子参数的配置格式如下
-Xrunjdwp:<name1>[=<value1>],<name2>[=<value2>]...
-Xrunjdwp:transport=dt_socket,server=y,address=8000
在8000端口监听Socket连接,挂起VM并且不加载运行主函数直到调试请求到达
-Xrunjdwp:transport=dt_shmem,server=y,suspend=n
选择一个可用的共享内存(因为没有指address)并监听该内存连接,同时加载运行主函数
-Xrunjdwp:transport=dt_socket,address=myhost:8000
连接到myhost:8000提供的调试服务(server=n,以调试客户端存在),挂起VM并且不加载运行主函数
-Xrunjdwp:transport=dt_shmem,address=mysharedmemory
通过共享内存的方式连接到调试服务,挂起VM并且不加载运行主函数
-Xrunjdwp:transport=dt_socket,server=y,address=8000,
onthrow=java.io.IOException,launch=/usr/local/bin/debugstub
等待java.io.IOException被抛出,然后挂起VM并监听8000端口连接,在接到调试请求后以命令/usr/local/bin/debugstub dt_socket myhost:8000执行
-Xrunjdwp:transport=dt_shmem,server=y,onuncaught=y,launch=d:\bin\debugstub.exe
等待一个RuntimeException被抛出,然后挂起VM并监听一个可用的共享内存,在接到调试请求后以命令d:\bin\debugstub.exe dt_shmem <address>执行,<address>是可用的共享内存
-Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n
请按以下步骤进行(本人已经在Eclipse 3.2, JDK 1.5_08)环境下调试成功。
1. 在启动Java程序时,在Java启动命令中,加入以下参数
-Xdebug -Xrunjdwp:transport=dt_socket,address=1234,server=y,suspend=n
注: suspend参数表示,启动时,是否等待JPDA调试端连接。n表示否
2. 配置完后,就可以运行Java程序,看到如下提示,表示已经开启debug功能
Listening for transport dt_socket at address: 1234
3. 打开Eclipse, 在菜单"run"->"debug..." 弹出的对话框中,选择 Remote Java Application,新建Debug配置
* Project是运行的程序源代码项目
* Host,Port Host:运行的Java程序所在的Ip Port在Java运行命令中设置的端口
4. 完成,直接运行Debug即可。接下来,与调试本地的程序的方法相同。
发表评论
-
JAVA HotSwap
2011-08-23 17:37 3604Hotswap 是一个允许在运行状态下无限制的修改 ... -
项目中用到的JPA Annotation 之二:Inheritance
2011-06-29 20:35 963Target: Classes Defines th ... -
项目中用到的JPA Annotation 之一:DiscriminatorColumn
2011-06-29 19:58 1888Target: ClassesSpecifies the di ... -
解决MAVEN内存溢出
2011-05-18 15:34 1649解决Maven中OutOfMemory错误Windows环 ... -
EL 表达式不能解析
2011-03-30 15:44 1584今天学习spring的MVC框架,发现EL 表达式 ... -
Java 自带 MD5 加密
2010-08-25 10:22 2270package com.exigenservice.er ... -
配置log4j输出ibatis的SQL语句
2009-12-09 14:38 3078ibatis不像hibernate那样在配置文件中注明是否输出 ... -
Java try catch finally的执行顺序
2009-11-30 13:43 12678关于Java中try catch finally ... -
java 连接 Mysql,Oracle,MSSQL
2009-05-14 15:56 1601MySql: Class.forName(" ... -
Lucene检索文件(txt,jsp,html)
2009-02-05 21:47 2240Lucene检索文件包裹txt,jsp,html格式(如果是w ... -
java中的值传递和引用传递
2009-02-04 12:59 1227值传递:方法调 ... -
Serializable作用
2008-12-19 09:26 2553没有implements Serializable ... -
锚的用法
2008-12-15 13:34 1572链接有两种,一种是不同页面间的链接。另外一种是页内链接,我们一 ... -
清晰了解String操作
2008-10-25 07:49 1212我们来看一段再经典不过的程序: class StringTes ... -
细说java.util包
2008-10-23 10:09 997线性表,链表,哈希 ... -
浅析Java语言中两种异常的差别
2008-10-12 11:37 1156Java提供了两类主要的异 ... -
struts 2 标签之<s:tree/>和<s:treenode/>简单实例
2008-09-19 09:37 3092代码: <%@ page language=" ... -
struts2标签的定义文件 struts-tags.tld
2008-09-19 09:35 8856在工程中使用struts2标签 一、struts2标签定义文 ... -
DisplayTag
2008-09-08 14:02 1685用了一段时间的Display Ta ... -
数据库clob的操作
2008-08-26 14:13 2494下面介绍数据库中clob(characher large ob ...
相关推荐
JPDA是Java平台调试架构,它由Java虚拟机后端和调试平台前端两部分构成,使得调试平台可以通过调试交互协议向Java虚拟机请求服务,从而对运行在虚拟机中的程序进行调试。 具体到本文中,我们的应用服务器是Tomcat ...
JPDA 是 Java 平台上用于调试的标准体系结构,它由以下几个主要部分组成: 1. **JVM TI (Java Virtual Machine Tool Interface)**: 定义了 JVM 为了支持调试而必须提供的功能及相应的访问接口。这些接口是由 JVM...
标题中的“7_目标跟踪_jpda.zip”表明这是一个关于目标跟踪技术的压缩包,而“jpda”通常指的是Java Platform Debugger Architecture(Java平台调试架构)。这个压缩包可能包含了一系列有关如何使用JPDA进行目标跟踪...
标题中的"JPDA.rar"可能是指Java Platform Debugger Architecture(Java平台调试架构)的压缩文件,而"JPDA数据关联_jpda_jpda关联_数据关联JPDA_跟踪波门"这部分描述了与JPDA相关的特定应用或概念,特别是关于数据...
在软件开发领域,尤其是大型分布式系统或微服务架构中,Java远程调试是一项关键技能,它允许开发者在本地机器上调试运行在远程服务器上的Java应用程序,极大地提高了问题定位和解决效率。本文将围绕“Java远程调试”...
它是Java平台调试架构(JPDA)的一部分,用于调试Java应用程序。 8. javah:C头文件和存根生成器。它用于编写本地方法,即调用非Java代码的方法。 9. javap:类文件的反汇编器。它可以查看Java类文件的内部结构,...
在开发过程中,特别是在分布式系统或微服务架构中,远程调试成为解决复杂问题的关键技术之一。本文将详细介绍如何通过JAVA进行远程调试,包括配置环境、启动调试服务器以及连接远程调试客户端等步骤。 #### 一、...
- **JDI(Java Debug Interface)**:Java调试接口,JPDA的一部分,定义了调试器与Java SE虚拟机之间的交互方式。 - **JDWP(Java Debug Wire Protocol)**:定义了调试器与Java SE虚拟机之间的通信协议。 - **...
JPDA,全称为Java Platform Debugger Architecture,是Java虚拟机(JVM)提供的一套用于调试Java应用的开放标准架构。它定义了如何创建、连接到目标虚拟机,以及如何执行调试操作的协议和API。JPDA由三部分组成: 1...
JPDA(Java Platform Debugger Architecture)是Java平台的调试架构。它提供了一种标准化的方式来调试Java应用程序。JPDA允许开发者使用各种调试工具来调试Java应用程序。 如何在Tomcat中使用JPDA? 要在Tomcat中...
##### 远程调试架构 远程调试通常基于一种称为Java平台调试器架构(JPDA)的技术。JPDA提供了一套标准接口,使得调试工具能够与正在运行的Java应用程序交互。该架构主要由以下几个部分组成: - **Java虚拟机工具...
关于JPDA的深入理解,它是一个为Java平台定义的标准调试架构,包括三个核心组件: 1. JVM TI(Java Virtual Machine Tool Interface):这是JVM为支持调试而提供的接口,由JVM自身实现。调试器通过JVM TI的本地接口...
#### 二、JAVA 调试框架(JPDA)架构 JPDA 的架构可以简单地分为以下几个部分: 1. **Debugger Interface**:调试客户端使用的接口。 2. **Comm Channel**:调试客户端与 JVM 之间通信的通道。 3. **JVMDI**:JVM ...
- **Java调试架构(JPDA)**:JPDA是Java平台的一个标准调试架构,提供了一种机制来实现跨进程或跨机器的调试。 #### 二、Java语言基础知识 - **基本数据类型转换**:Java中基本数据类型的自动转换称为提升...
JPDA定义了一种标准架构,使得开发者可以在各种环境下调试Java应用程序,无论是在桌面系统还是嵌入式设备。 - JVMTI是JVM提供给调试工具的接口,允许调试器与JVM进行交互,获取运行时信息,设置断点等。 - JDWP是...
JPDA(Java Platform Debugger Architecture)是Java平台的调试架构,可以用来捕获和恢复Java应用程序的运行状态。JPDA提供了一个通用的调试接口,可以用来实现各种调试任务,例如断点调试、变量检查、线程管理等。 ...
5. **Java Platform Debugger Architecture (JPDA)**:这是用于Java SE调试支持的基础架构。 6. **Java 2D API**:这是一套用于高级2D图形和图像的类,支持图像组合和Alpha通道图像,同时还提供了一套用于精确的...