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

相關文章
相關標籤/搜索