tomcat如何正確的開啟遠程調試功能


在日常開發中,有時需要對遠程服務器上的應用進行遠程調試,對於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
 
  1. ./catalina.sh jpda start  

默認情況下,遠程調試的默認端口為8000,可以通過JPDA_ADDRESS進行配置,指定自定義的端口,另外,還有兩個可以配置的參數

 

 

  • JPDA_TRANSPORT:即調試器和虛擬機之間數據的傳輸方式,默認值是dt_socket
  • JPDA_SUSPEND:即JVM啟動后是否立即掛起,默認是n

 

可以在catalina.sh中進行配置:

 

[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參數:

 

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

使用這種方式開啟遠程調試功能,在啟動時沒有什么問題,也能夠正常的進行遠程調試,但是在停止tomcat時:

 

 

[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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM