天天看點

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