1. 程式人生 > >idea tomcat 遠端除錯

idea 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:

./catalina.sh jpda start

預設情況下,遠端除錯的預設埠為8000,可以通過JPDA_ADDRESS進行配置,指定自定義的埠,另外,還有兩個可以配置的引數

  • JPDA_TRANSPORT:即偵錯程式和虛擬機器之間資料的傳輸方式,預設值是dt_socket
  • JPDA_SUSPEND:即JVM啟動後是否立即掛起,預設是n

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

JPDA_TRANSPORT=dt_socket
JPDA_ADDRESS=5005
JPAD_SUSPEND=n

或者通過JPDA_OPTS進行配置:

JPDA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005’

這樣啟動之後 ,就可以通過Eclise或IDEA進行遠端除錯了,IDEA具體如何進行遠端除錯,請參考另一篇文章

網上有很多文章提供了另一種開啟遠端除錯功能的方式,即通過JAVA_OPTS指定相應的JPDA引數:

JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005”

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

./catalina.sh stop

會出現如下錯誤:

  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掉,所以還是應該使用前面的方式開啟遠端除錯功能。 --------------------- 本文來自 MikanMu 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/mhmyqn/article/details/49209541?utm_source=copy

然後在IDEA中設定如下:

1、開啟配置頁面

2、新增遠端除錯配置

3、進行引數配置

其中Host為遠端伺服器的地址,當然如果host是localhost,表示是本機的tomcat,Port為遠端debug的埠,注意要與前面設定的address保持一致。

4、啟動遠端的tomcat

5、啟動tomcat後,即可在IDEA中執行除錯了,如下:

訪問斷點對應的程式碼,OK,大功告成。

--------------------- 本文來自 MikanMu 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/mhmyqn/article/details/49160339?utm_source=copy