jbuilder下无法调试Tomcat的WebApp的问题
2005-11-15 22:39
495 查看
我用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端口上的调试器.
-- 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端口上的调试器.
相关文章推荐
- MyEclipse 中tomcat无法调试的问题
- myeclipse+tomcat无法进行断点调试的问题
- 解决tomcat无法访问webapp下面的静态资源问题
- Intelij部署项目到Tomcat时,无法正确将target放入WebApp的问题
- Tomcat升级到5.5,数据源无法使用的问题整理
- 压缩包版Tomcat修改端口号无效以及无法自动解压war包问题的解决方法
- Flex 调试无法正常启动问题总结
- android webApp 调试问题解决
- 解决WebService无法调试的问题(SchemaSerializationMode)
- tomcat startup.bat 无法启动问题解决方法 标签: startup.bat启动脚本tomcatTomcat 2012-12-06 21:52 10904人阅读 评论(0) 收藏 举报
- IDEA 使用Tomcat插件进行调试web程序时,1099端口被占用问题
- myeclipse部署maven项目到tomcat,src/main/resources里面配置文件部署不到webapp下classes的问题
- [问题解决]手机调试无法显示logcat内容
- 安装IE8后,VS2008无法调试ActiveX的问题
- 解决eclipse中tomcat无法识别maven web项目问题
- windows 2003下.net 无法调试问题的解决方法
- win7下windbg无法找到正确调试符号问题
- tomcat 无法调试当前J2EE工程问题 报souce not found
- VC6路径设置错误引发的无法调试的奇怪问题
- Linux相关问题-CentOS6.5 x64版本号下Tomcat无法自启动的解决的方法