tomcat如何正确的开启远程调试功能

在平常开发中,有时须要对远程服务器上的应用进行远程调试,对于tomcat,要进行远程调试其实很简单,只须要在启动tomcat时开启jpda服务便可。java

什么是JPDA呢?tomcat

JPDA(Java Platform Debugger Architecture) 是 Java 平台调试体系结构的缩写,经过 JPDA 提供的 API,开发人员能够方便灵活的搭建 Java 调试应用程序。JPDA 主要由三个部分组成:Java 虚拟机工具接口(JVMTI),Java 调试线协议(JDWP),以及 Java 调试接口(JDI)。而像Eclipse和IDEA这种开发工具提供的图形界面的调试工具,其实就是实现了JDI。关于JPDA的详细信息,能够查看developerWorks上的系列文章——深刻Java调试体系服务器

tomcat使用以下方式进行启动jpda:jvm

 

[plain]  view plain  copy
 
  1. ./catalina.sh jpda start  

默认状况下,远程调试的默认端口为8000,能够经过JPDA_ADDRESS进行配置,指定自定义的端口,另外,还有两个能够配置的参数socket

 

 

  • JPDA_TRANSPORT:即调试器和虚拟机之间数据的传输方式,默认值是dt_socket
  • JPDA_SUSPEND:即JVM启动后是否当即挂起,默认是n

 

能够在catalina.sh中进行配置:jsp

 

[plain]  view plain  copy
 
  1. JPDA_TRANSPORT=dt_socket  
  2. JPDA_ADDRESS=5005  
  3. JPAD_SUSPEND=n  

或者经过JPDA_OPTS进行配置:工具

 

 

[plain]  view plain  copy
 
  1. JPDA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005’  

这样启动以后 ,就能够经过Eclise或IDEA进行远程调试了,IDEA具体如何进行远程调试,请参考另外一篇文章开发工具

 

网上有不少文章提供了另外一种开启远程调试功能的方式,即经过JAVA_OPTS指定相应的JPDA参数:spa

 

[plain]  view plain  copy
 
  1. JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005”  

使用这种方式开启远程调试功能,在启动时没有什么问题,也可以正常的进行远程调试,可是在中止tomcat时:.net

 

 

[plain]  view plain  copy
 
  1. ./catalina.sh stop  

会出现以下错误:

 

 

[plain]  view plain  copy
 
  1. ERROR: transport error 202: bind failed: Address already in use  
  2. ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)  
  3. JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:750]  
  4. FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)  

致使不能正常终止java进程,须要手动的kill掉,因此仍是应该使用前面的方式开启远程调试功能。

 

来源:http://blog.csdn.net/mhmyqn/article/details/49209541

相关文章
相关标签/搜索