jbuilder下无法调试Tomcat的WebApp的问题

我用JBuilder8以及JBuilder2005开发Web项目时, 不管使用自带的Tomcat4还是Tomcat5,均无法进入Debug模式, 提示:
-- Cannot start Java debug process VM --

com.sun.jdi.connect.VMStartException: VM initialization failed for: C:/JBuilder2005/jdk1.4/bin/javaw -classpath "C:/JBuilder2005/thirdparty/jakarta-tomcat-5.0.27/bin/bootstrap.jar;C:/JBuilder2005/jdk1.4/lib/tools.jar"  "-Dcatalina.home=C:/JBuilder2005/thirdparty/jakarta-tomcat-5.0.27"  -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=suzpcssdgs613:2381,suspend=y org.apache.catalina.startup.Bootstrap -config D:/abc/Tomcat/conf/server8080.xml start
Transport dt_socket failed to initialize, rc = 509.


Goolge了一番后,终于找到了原因:
由 于我的机器上安装了多个JDK,而且在环境变量%PATH%中, 第一个出现的Java路径是"D:/jdk1.5/jre/bin",而JB使用的Java是"C:/JBuilder2005/jdk1.4/bin/ javaw",因而导致了"Connector"的问题.

显然, 解决的方法无非是以下二者之一::
一. 设置Path变量的Java路径, 使之指向JB的Java
二. 设置Jbuilder's JDK路径,使之同Path里面的JDK路径一致 (我的做法). 具体方法:
 a. Tool->Configure->JDK, 把 "D:/jdk1.5" 加进去.
 b. Project->Project Properties->Run, 依次选择 "Server" runtime configuration, "Edit", "JDK", use the "specified jdk" , select the jdk1.5

然后, 启动Debug模式, OK. 从以下的输出可以看出不同(注意下划线部分)
D:/jdk1.5/bin/javaw -classpath "C:/JBuilder2005/thirdparty/jakarta-tomcat-5.0.27/bin/bootstrap.jar;D:/jdk1.5/lib/tools.jar"  "-Dcatalina.home=C:/JBuilder2005/thirdparty/jakarta-tomcat-5.0.27"  -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=suzpcssdgs613:2779,suspend=y org.apache.catalina.startup.Bootstrap -config D:/abc/Tomcat/conf/server8080.xml start
Mar 15, 2005 11:26:12 AM org.apache.coyote.http11.Http11Protocol init
http://forum.java.sun.com/thread.jspa?threadID=577610&messageID=3025506

问题分析:
Java的调试是通过所谓的JPDA架构(Java Platform Debugger Architecture) 和JDWP协议(Java Debug Wire Protocol), 来实现的. 在JPDA下, 调试器与被调试的VM(Target VM) 通过Transport来通信. Sun实现了两种Transport: 基于Socket的TCP/IP Transport和共享内存的Transport. 基于Socket的方式可以实现跨平台的远程调试, 而共享内存的方式只能在Windows平台下的同一台机器上.
在JPDA下, 调试器通过封装了Transport的Connector来建立同Target VM的连接, 而Target VM上也有一个VM本身内置的封装了Transport的Agent来接受连接.

具体到SUN的VM实现, 为了启动JDWP Agent以被调试, 在运行Target VM的时候需要加入以下参数: -Xdebug(启动Debugging) 和 -Xrunjdwp:(配置Connector)

-Xrunjdwp 需要transport属性指明Connector类型(Socket还是Shared Memory), server属性指明主动还是被动(server='y', 被动监听Debugger的连接, server='n', 主动连接到Debugger, 默认是'n'), Address属性(当server='y'的时候, 表明监听得端口, 当server=n的时候,表明Debugger的地址.

回到JB的问题上, 对照JB给出的启动调试的命令行参数:-Xrunjdwp:transport=dt_socket,address=suzpcssdgs613:2381 可以知道:JB使用socket方式的Connector启动Tomcat5(org.apache.catalina.startup.Bootstrap), 主动连接到2381端口上的调试器.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值