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上的系列文章——
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
會出現如下錯誤:
-
ERROR: transport error 202: bind failed: Address already in use
-
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
-
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:750]
-
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