- 浏览: 654877 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (170)
- Android (10)
- Java (35)
- PHP (3)
- Linux (3)
- Powerdesigner (2)
- dedcms (1)
- nginx (1)
- Flex (9)
- REST (2)
- Google App Engine (1)
- mysql (6)
- JAVA开源项目 (1)
- Eclipse (18)
- Eclipse Orion (1)
- Dojo (2)
- UML (1)
- Eclipse GEF EMF (4)
- Eclipse 插件开发 (6)
- OSGI (2)
- DeDeCMS (1)
- Maqetta (2)
- JavaScript (1)
- nginx php (1)
- Dojo V1.7 (2)
- Spring3 (4)
- Hibernate3 (4)
- MongoDB (3)
- Scala (2)
- DSL (1)
- Python (3)
- Maven (1)
- Tomcat (3)
- XMPP (2)
- Apache (4)
- NodeJS (1)
- SQLSERVER (2)
- HTML5 (1)
- Nexus (1)
- web服务器 (2)
- Jetty (2)
- weixin (1)
- ngrok (1)
- 网络与信息安全 (1)
最新评论
-
wangyudong:
配置有点晕,开源社区上找了一个开源的Holer,只需要设置Ac ...
用ngrok实现外网访问本地WEB项目的方法 -
lolo968:
你收集的资料没有链接
基于OSGI的框架开发小结(转) -
smartdog:
使用的maven的版本很老的,而且写的不是很清楚,建议可以参考 ...
Maven多项目依赖配置 -
Tom.X:
OSGi联盟官网:http://osgia.com
基于OSGI的框架开发小结(转) -
Miller003:
你好,我在本地测试时,删除catalina.jar和tomca ...
基于Tomcat7的HTML5 WebSocket 应用示例
JAVA的远程调试 基于Java Platform Debugger Architecture(JPDA:Java平台调试架构)。 JVM 本身支持指定参数来让java程序以调试模式启动。虚拟机运行在调试模式下,你只要去连接他的相应的监听端口就可以了。
像tomcat等服务器也都提供了指定调试参数的设置方法
典型的调试参数如下
-Xdebug -Xrunjdwp:transport=dt_socket,address=8888,server=y,suspend=n
典型的连接 调试端口的命令如下,以jdk自带的命令行调试 工具jdb为例。
连接 192.29.24.62 的8888 端口
/build/java/jdk1.6.0_03/bin/jdb -attach 192.29.24.62:8888
下面这句和上面采用attach参数的上面一句一样的效果。不过采用 -connect的指定了详细了,有时从windows的机器上去连接上面
Linux的机器,上面那个不行,不过这句就可以。详细见sun文档http://doc.javanb.com/javasdk-docs-1-5-0/guide/jpda/conninv.html#JDB
/build/java/jdk1.6.0_03/bin/jdb -connect com.sun.jdi.SocketAttach:port=8888,hostname=192.29.24.62
在 Eclipse 中也有远程调试 选项的了,“run” -》 “Open Debug Dialog” -》“Remote Java Application” 那个就是。
在选项里面选定具体的“项目” “代码目录”等,填好ip、端口,最后点下面的“ 调试 ”按钮就行了,启动后下断点,等等都和本机调试无异。注意的是本机的代码和在远程机上运行的代码应该是一致的。
----------------jdb 用法----------------
C:\Program Files\Java\jdk1.6.0_03\bin>jdb -help
用法:jdb <选项> <类> <参数>
其中选项包括:
-help 输出此消息并退出
-sourcepath <以 ";" 分隔的目录>
在其中查找源文件的目录
-attach <地址>
使用标准连接器连接到正在指定地址运行的 VM
-listen <地址>
等待正在指定地址运行的 VM 使用标准连接器进行连接
-listenany
等待正在任意可用地址运行的 VM 使用标准连接器进行连接
-launch
立即启动 VM,而不等待 'run' 命令
-listconnectors 列出此 VM 中可用的连接器
-connect <连接器名称>:<名称 1>=<值 1>,...
使用命名的连接器和列出的参数值连接到目标 VM
-dbgtrace [标志] 输出用于调试 jdb 的信息
-tclient 在 Hotspot(TM) Performance Engine(客户机)中运行应用程序
-tserver 在 Hotspot(TM) Performance Engine(服务器)中运行应用程序
转发给被调试进程的选项:
-v -verbose[:class|gc|jni]
启用详细模式
-D<名称>=<值> 设置系统属性
-classpath <以 ";" 分隔的目录>
列出要在其中查找类的目录
-X<选项> 非标准目标 VM 选项
<类> 是要开始调试的类的名称
<参数> 是传递给 <类> 的 main() 方法的参数
要获得命令帮助,请在 jdb 提示符下键入 'help'
C:\Program Files\Java\jdk1.6.0_03\bin>jdb
正在初始化 jdb...
> help
** 命令列表 **
connectors -- 列出此 VM 中可用的连接
run [类 [参数]] -- 开始执行应用程序的主类
threads [线程组] -- 列出线程
thread <线程 ID> -- 设置默认线程
suspend [线程 ID] -- 暂停线程(默认值为 all)
resume [线程 ID] -- 恢复线程(默认值为 all)
where [<线程 ID> | all] -- 转储线程的堆栈
wherei [<线程 ID> | all] -- 转储线程的堆栈以及 pc
up [n 帧] -- 向上移动线程的堆栈
down [n 帧] -- 向下移动线程的堆栈
kill <线程 ID> <表达式> -- 中止具有给定的异常对象
interrupt <线程 ID> -- 中断线程
print <表达式> -- 输出表达式的值
dump <表达式> -- 输出所有对象信息
eval <表达式> -- 计算表达式的值(与
set <lvalue> = <表达式> -- 为字段/变量/数组元素
locals -- 输出当前堆栈帧中的所有
classes -- 列出当前已知的类
class <类 ID> -- 显示已命名类的详细信息
methods <类 ID> -- 列出类的方法
fields <类 ID> -- 列出类的字段
threadgroups -- 列出线程组
threadgroup <名称> -- 设置当前线程组
stop in <类 ID>.<方法>[(参数类型,...)]
-- 在方法中设置断点
stop at <类 ID>:<行> -- 在行中设置断点
clear <类 ID>.<方法>[(参数类型,...)]
-- 清除方法中的断点
clear <类 ID>:<行> -- 清除行中的断点
clear -- 列出断点
catch [uncaught|caught|all] <类 ID>|<类模式>
-- 出现指定的异常时中断
ignore [uncaught|caught|all] <类 ID>|<类模式>
-- 对于指定的异常,取消
watch [access|all] <类 ID>.<字段名>
-- 监视对字段的访问/修改
unwatch [access|all] <类 ID>.<字段名>
-- 停止监视对字段的访问/
trace [go] methods [thread]
-- 跟踪方法的进入和退出。
-- 除非指定 'go',否则所
trace [go] method exit | exits [thread]
-- 跟踪当前方法的退出或所
-- 除非指定 'go',否则所
untrace [方法] -- 停止跟踪方法的进入和/或退
step -- 执行当前行
step up -- 执行到当前方法返回其调
stepi -- 执行当前指令
next -- 跳过一行(跨过调用)
cont -- 从断点处继续执行
list [line number|method] -- 输出源代码
use(或 sourcepath)[源文件路径]
-- 显示或更改源路径
exclude [<类模式>, ...|“无”]
-- 不报告指定类的步骤或方
classpath -- 从目标 VM 输出类路径信
monitor <命令> -- 每次程序停止时执行命令
monitor -- 列出监视器
unmonitor <监视器号> -- 删除某个监视器
read <文件名> -- 读取并执行某个命令文件
lock <表达式> -- 输出对象的锁信息
threadlocks [线程 ID] -- 输出线程的锁信息
pop -- 弹出整个堆栈,且包含当
reenter -- 与 pop 作用相同,但重
redefine <类 ID> <类文件名>
-- 重新定义类代码
disablegc <表达式> -- 禁止对象的垃圾回收
enablegc <表达式> -- 允许对象的垃圾回收
!! -- 重复执行最后一个命令
<n> <命令> -- 将命令重复执行 n 次
# <命令> -- 放弃(不执行)
help(或 ?) -- 列出命令
version -- 输出版本信息
exit(或 quit) -- 退出调试器
<类 ID>: 带有软件包限定符的完整类名
<类模式>: 带有前导或后缀通配符 (*) 的类名
<线程 ID>: 'threads' 命令中所报告的线程号
<表达式>: Java(TM) 编程语言表达式。
支持大多数常见语法。
可以将启动命令置于 "jdb.ini" 或 ".jdbrc" 之中
(两者位于 user.home 或 user.dir 中)
>
==========参考文档=======================================
什么是JPDA
Java Platform Debugger Architecture(JPDA:Java平台调试架构) 由Java虚拟机后端和调试平台前端组成
1.Java虚拟机提供了Java调试的功能
2.调试平台通过调试交互协议向Java虚拟机请求服务以对在虚拟机中运行的程序进行调试
JPDA的构架
JPDA通过两个接口和协议来完成如上的说明,分别是JVMTI(Java虚拟机工具接口)、JDWP(Java调试连线协议)和JDI(Java调试接口)。
1.JVMTI定义了虚拟机应该提供的调试服务,包括调试信息(Information譬如栈信息)、调试行为(Action譬如客户端设置一个断点)和通知(Notification譬如到达某个断点时通知客户端),该接口由虚拟机实现者提供实现,并结合在虚拟机中
2.JDWP定义调试服务和调试器之间的通信,包括定义调试信息格式和调试请求机制
3.JDI在语言的高层次上定义了调试者可以使用的调试接口以能方便地与远程的调试服务进行交互,Java语言实现,调试器实现者可直接使用该接口访问虚拟机调试服务。
运行方式
当虚拟机的调试服务运行时,虚拟机作为调试的服务提供端,监听一个连接,而调试器通过该连接与虚拟机进行交互。目前,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>是可用的共享内存
启动tomcat
-Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n
以上两行是tomcat5.5.12的catalina.bat文件中的一句,可以看出tomcat在JPDA方式下是怎么启动的,启动tomcat要用catalina jpda start来启动,不能用startup.bat启动,启动前设置好JPDA_TRANSPORT,JPDA_ADDRESS就OK了
-------------------------------------
Java远程调试
其实就是使用了JDK的JPDA,在启动服务器(Jboss或者Tomcat等)的命令行参数里面加上:
-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n
以Eclipse作为调试工具的话,创建一个Remote Java Application,连接参数填写正确的IP和端口(就是上面的8787)就行了
首先,JAVA自身支持调试功能,并提供了一个简单的调试工具--JDB,类似于功能强大的GDB,JDB也是一个字符界面的调试环境,并支持设置断点,支持线程线级的调试。
------------------------------------------------
JAVA的调试方法如下:
1。首先支持JVM,并设置参数,使之工作在DEBUG模式下,加入参数:-Xdebug -Xrunjdwp,transport=dt_socket,server=y,address=5432,suspend=n,onthrow=java.io.IOException,launch=/sbin/echo
其中,-Xdebug是通知JVM工作在DEBUG模式下,-Xrunjdwp是通知JVM使用(java debug wire protocol)来运行调试环境。该参数同时了一系列的调试选项:
transport指定了调试数据的传送方式,dt_socket是指用SOCKET模式,另有dt_shmem指用共享内存方式,其中,dt_shmem只适用于Windows平台。
server参数是指是否支持在server模式的VM中.
onthrow指明,当产生该类型的Exception时,JVM就会中断下来,进行调式。该参数可选。
launch指明,当JVM被中断下来时,执行的可执行程序。该参数可选
suspend指明,是否在调试客户端建立起来后,再执行JVM。
onuncaught(=y或n)指明出现uncaught exception 后,是否中断JVM的执行.
2。启动调试工具。
最简单的调试工具就是上面提到的JDB,以上述调试用JVM为例,可以用下面的命运行启动JDB:
jdb -connect com.sun.jdi.SocketAttach:port=5432,hostname=192.168.11.213
另外,还有好多的可视化调试工具,如 eclipse,jsawt等等。Eclipses可用 ant debug来建立一个调试方法。
发表评论
-
如何提高myeclipse的速度
2012-04-21 20:53 1096提高myeclipse的速度如下: 1、去除不需要加载的模块 ... -
Eclipse 插件开发中获取相关路径的方法汇总
2011-12-27 14:33 6149如何获如何获取相关路径的方法(没有全部试过,仅供参考): 得 ... -
Eclipse插件开发:关于警告“Discouraged access: *****”(转)
2011-12-22 10:06 1693今天试着用eclipse jee的pagedesigne ... -
It is indirectly referenced from required .class错误
2011-12-21 16:56 1680在eclipse中遇到The type *** cannot ... -
如何获取Eclipse里view的id
2011-12-21 12:50 4392在制作eclipse插件的时候,时常需要对已经存在的视图做一些 ... -
关于如何配置GEF中的PALETTE
2011-12-20 14:24 1191关于如何配置GEF中的Palette参考Dengues源代码: ... -
The hierarchy of the type is inconsistent
2011-12-19 11:10 3318These errors happend because ... -
Eclipse plugin开发总结
2011-12-16 14:43 1344创建dynamic web project的第一个wiz ... -
Eclipse 源码下载地址
2011-12-16 10:09 944dev.eclipse.org -
开发视图插件(转)
2011-12-15 11:02 2407视图是工作台页面内的可视组件,通常用来浏览信息的层次结构 ... -
开发透视图插件(转)
2011-12-15 10:44 939开发透视图插件 ... -
Eclipse plugin.xml 国际化
2011-12-13 11:11 11841、在Plugin.xml同目录下新建plugin ... -
简便更改Eclipse的Title标题/标题图标/启动画面/等
2011-12-12 16:19 7798实现步骤如下: 1、 ... -
GMF 所依赖的插件
2011-10-23 09:20 1321GMF是Eclipse的一个插件,如同其它插件一样,它首先需 ... -
Gef与MVC体系结构
2011-09-29 14:53 1143摘要: 本文首先介绍了标准的 MVC 体系构架,同时 ... -
25个最佳最闪亮的Eclipse开发项目
2011-08-30 09:32 1775Eclipse基金会发布了最新的Eclipse太阳神版本,囊括 ... -
Eclipse E4 的XWT -- 基于XML的Eclipse开发模式
2011-08-30 09:21 1341Eclipse E4 的下载地址 http:/ ...
相关推荐
本篇文章将深入探讨如何使用Eclipse进行远程调试Java应用程序。 首先,确保你已经安装了Eclipse的最新版本,例如Ganymede(V3.4)。Ganymede引入了套接字监听连接器,使得远程调试变得更加灵活。在创建启动配置时,...
本篇文章将详细讲解如何在Eclipse中设置和使用远程调试Java代码。 首先,我们需要理解远程调试的基本原理。远程调试允许开发者在本地IDE上对运行在另一台机器上的应用程序进行调试。这通常通过JVM的远程调试接口...
NC Eclipse 远程调试是指在 Eclipse 集成开发环境中,使用 Java Debug Wire Protocol (JDWP) 实现远程调试 Java 应用程序的功能。JDWP 是一个基于 socket 的通信协议,用于在 debug 客户端和服务器之间传输调试信息...
远程调试是指在一台机器上运行Java应用程序,并允许另一台机器上的IDE连接到该应用程序进行调试的过程。 ##### 3.1 配置应用程序 - **启动诊断工具**:在Linux服务器上,通过Xshell或其他SSH客户端,使用以下命令...
远程调试是指在一个主机上调试运行在另一台机器上的应用程序的技术。这对于分布式系统的开发尤其有用,因为它允许开发者在不同的环境中调试代码,确保应用能够正确地在目标环境中运行。 #### 二、配置步骤 ##### 1...
在软件开发领域,尤其是大型分布式系统或微服务架构中,Java远程调试是一项关键技能,它允许开发者在本地机器上调试运行在远程服务器上的Java应用程序,极大地提高了问题定位和解决效率。本文将围绕“Java远程调试”...
### Java开发环境Eclipse远程调试端口配置 #### 运行环境配置 为了实现Java Eclipse远程调试功能,首先需要确保本地开发环境与远程服务器环境之间的兼容性和一致性。具体步骤如下: 1. **运行ncSysconfig命令**:...
本文将详细介绍如何使用JPDA进行Java程序的远程调试。 首先,为了使用JPDA进行远程调试,你需要确保目标Java应用程序在启动时已经启用了调试模式。在Windows环境下,这通常意味着在Java命令行参数中添加特定的选项...
windchill 远程调试详细介绍 Windchill 是一种基于 ...Windchill 远程调试是 Windchill 开发环境中的一项重要功能,它提供了强大而灵活的远程调试机制,帮助开发人员快速、轻松地调试远程服务器上的 Java 应用程序。
MyEclipse作为一款强大的Java集成开发环境,提供了远程调试功能,使得开发者能够远程连接到运行在其他机器上的应用,进行实时的代码调试。下面我们将详细讲解MyEclipse远程调试的配置方法及其相关知识点。 1. **...
Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时。它允许开发者在不中断服务的情况下,直接在远程服务器上查看程序运行状态,设置和触发断点,以便于定位和修复问题。以下将...
配置Java运行参数,以便在远程调试中使用。 * 例如,配置-Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8999的参数,其中IP和端口号可以根据需要修改。 四、WAS环境开远程调试方法 * 在WAS环境中,...
Java远程调试是指在开发过程中,开发人员能够通过网络连接到远程机器上运行的Java应用程序进行调试的过程。这种方式可以有效解决由于部署环境差异导致的问题定位困难,尤其是在分布式系统和微服务架构中,远程调试更...
Eclipse 远程调试是指在 Eclipse 中对 Java 应用程序进行远程调试,通过配置 Tomcat 和 Eclipse,可以实现对远程服务器上的 Java 应用程序的调试。下面将详细介绍 Eclipse 远程调试的配置和使用方法。 一、配置 ...
MyEclipse作为一款强大的Java集成开发环境(IDE),提供了远程调试的功能,使得开发者能够在本地环境中对运行在远程服务器上的Java应用程序进行调试。本文将详细介绍如何在MyEclipse中设置和使用远程调试功能,以及...
在Java编程过程中,遇到程序出错或运行异常时,调试是找出问题源头的关键步骤。本文将详细介绍Java调试的一些核心技术和方法。 首先,Java调试的基础是JVM(Java虚拟机)提供的调试接口JDWP(Java Debug Wire ...
远程调试允许开发者在不直接访问服务器机器的情况下,通过网络连接到运行中的应用程序,并设置断点、查看变量值和调用堆栈,这对于分布式系统和跨地域的团队协作尤其重要。 为了开启Tomcat的远程调试功能,我们需要...
在Java开发过程中,远程调试是一项非常实用的功能,它允许开发者在不访问服务器本地环境的情况下,对运行在远程服务器上的应用程序进行调试。对于IntelliJ IDEA(Idea)用户,这个过程可以通过几步简单设置来实现。...
Java远程调试是一项强大的技术,它允许开发者在不同的设备或服务器上对Java应用程序进行调试,而无需实际坐在该设备前。这份“Java远程调试PPT”深入浅出地讲解了这一主题,包括JVM的调试模型、Eclipse的调试技巧、...