tomcat开启远程调试功能
2017-11-09 14:44
405 查看
在日常开发中,有时需要对远程服务器上的应用进行远程调试,对于tomcat,要进行远程调试其实很简单,只需要在启动tomcat时开启jpda服务即可。
什么是JPDA呢?
JPDA(Java Platform Debugger Architecture) 是 Java 平台调试体系结构的缩写,通过 JPDA 提供的 API,开发人员可以方便灵活的搭建 Java 调试应用程序。JPDA 主要由三个部分组成:Java 虚拟机工具接口(JVMTI),Java 调试线协议(JDWP),以及 Java 调试接口(JDI)。而像Eclipse和IDEA这种开发工具提供的图形界面的调试工具,其实就是实现了JDI。关于JPDA的详细信息,可以查看developerWorks上的系列文章——深入Java调试体系
tomcat使用如下方式进行启动jpda:
[plain]
view plain
copy
./catalina.sh jpda start
默认情况下,远程调试的默认端口为8000,可以通过JPDA_ADDRESS进行配置,指定自定义的端口,另外,还有两个可以配置的参数
JPDA_TRANSPORT:即调试器和虚拟机之间数据的传输方式,默认值是dt_socket
JPDA_SUSPEND:即JVM启动后是否立即挂起,默认是n
可以在catalina.sh中进行配置:
[plain]
view plain
copy
JPDA_TRANSPORT=dt_socket
JPDA_ADDRESS=5005
JPAD_SUSPEND=n
或者通过JPDA_OPTS进行配置:
[plain]
view plain
copy
JPDA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005’
这样启动之后 ,就可以通过Eclise或IDEA进行远程调试了,IDEA具体如何进行远程调试,请参考另一篇文章。
网上有很多文章提供了另一种开启远程调试功能的方式,即通过JAVA_OPTS指定相应的JPDA参数:
[plain]
view plain
copy
JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005”
使用这种方式开启远程调试功能,在启动时没有什么问题,也能够正常的进行远程调试,但是在停止tomcat时:
[plain]
view plain
copy
./catalina.sh stop
会出现如下错误:
[plain]
view plain
copy
ERROR: transport error 202: bind failed: Address already in use
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:750]
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)
导致不能正常终止java进程,需要手动的kill掉,所以还是应该使用前面的方式开启远程调试功能。
什么是JPDA呢?
JPDA(Java Platform Debugger Architecture) 是 Java 平台调试体系结构的缩写,通过 JPDA 提供的 API,开发人员可以方便灵活的搭建 Java 调试应用程序。JPDA 主要由三个部分组成:Java 虚拟机工具接口(JVMTI),Java 调试线协议(JDWP),以及 Java 调试接口(JDI)。而像Eclipse和IDEA这种开发工具提供的图形界面的调试工具,其实就是实现了JDI。关于JPDA的详细信息,可以查看developerWorks上的系列文章——深入Java调试体系
tomcat使用如下方式进行启动jpda:
[plain]
view plain
copy
./catalina.sh jpda start
默认情况下,远程调试的默认端口为8000,可以通过JPDA_ADDRESS进行配置,指定自定义的端口,另外,还有两个可以配置的参数
JPDA_TRANSPORT:即调试器和虚拟机之间数据的传输方式,默认值是dt_socket
JPDA_SUSPEND:即JVM启动后是否立即挂起,默认是n
可以在catalina.sh中进行配置:
[plain]
view plain
copy
JPDA_TRANSPORT=dt_socket
JPDA_ADDRESS=5005
JPAD_SUSPEND=n
或者通过JPDA_OPTS进行配置:
[plain]
view plain
copy
JPDA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005’
这样启动之后 ,就可以通过Eclise或IDEA进行远程调试了,IDEA具体如何进行远程调试,请参考另一篇文章。
网上有很多文章提供了另一种开启远程调试功能的方式,即通过JAVA_OPTS指定相应的JPDA参数:
[plain]
view plain
copy
JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005”
使用这种方式开启远程调试功能,在启动时没有什么问题,也能够正常的进行远程调试,但是在停止tomcat时:
[plain]
view plain
copy
./catalina.sh stop
会出现如下错误:
[plain]
view plain
copy
ERROR: transport error 202: bind failed: Address already in use
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:750]
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)
导致不能正常终止java进程,需要手动的kill掉,所以还是应该使用前面的方式开启远程调试功能。
相关文章推荐
- Tomcat开启远程调试功能
- tomcat如何正确的开启远程调试功能
- tomcat如何正确的开启远程调试功能
- 开启 Tomcat 远程调试
- 开启tomcat远程调试脚本
- Tomcat 7 下的远程调试开启
- tomcat开启远程调试
- 在 Zend Studio 中开启 PHP 5.2.x 环境的远程调试功能
- 开启flume的远程调试功能
- Zend Studio 开启 PHP 5.2.x 环境的远程调试功能[ZendDebugger]
- ubuntu下tomcat开启远程调试端口
- 关于打开tomcat的远程调试功能
- Zend Studio 开启 PHP 5.2.x 环境的远程调试功能[ZendDebugger]
- linux下tomcat开启远程调试
- Java项目开启远程调试(tomcat、springboot)
- tomcat8 开启jmx远程连接功能
- 开启Tomcat远程调试
- tomcat开启远程调试
- tomcat 开启远程调试
- 【开启Tomcat远程调试失败】Failed to connect to remote VM.