1. 程式人生 > >idea遠端debug除錯java程式碼

idea遠端debug除錯java程式碼

前言:
日常環境和預發環境遇到問題時,可以用遠端除錯的方法本地打斷點,在本地除錯。生產環境由於網路隔離和系統穩定性考慮,不能進行遠端程式碼除錯。

整體過程是通過修改遠端服務JAVA_OPTS引數,然後本地通過Eclipse或IDEA等工具除錯。

主要理論:

JPDA(Java Platform Debugger Architecture)是Java平臺除錯體系結構的縮寫。由3個規範組成,分別是JVMTI(JVM Tool 

Interface),JDWP(Java Debug Wire Protocol),JDI(Java Debug Interface) 。

·        1.JVMTI定義了虛擬機器應該提供的除錯服務,包括除錯資訊(Information譬如棧資訊)、除錯行為(Action譬如客戶端設定一個

斷點)和通知(Notification譬如到達某個斷點時通知客戶端),該介面由虛擬機器實現者提供實現,並結合在虛擬機器中

·        2.JDWP定義除錯服務和偵錯程式之間的通訊,包括定義除錯資訊格式和除錯請求機制

·        3.JDI在語言的高層次上定義了除錯者可以使用的除錯介面以能方便地與遠端的除錯服務進行互動,Java語言實現,偵錯程式實現

者可直接使用該介面訪問虛擬機器除錯服務。 java除錯工具jdb,就是sun公司提供的JDI實現。eclipse IDE,它的兩個外掛

org.eclipse.jdt.debug.ui和org.eclipse.jdt.debug與其強大的除錯功能密切相關,其中前者是eclipse除錯工具介面的實現,而後者則是

JDI的一個完整實現。

遠端除錯:

遠端除錯分為主動連線測試和被動連線測試,這裡主要介紹主動連線測試,因為一般開發時都用這種方式。以idea為例。

主動連線除錯:服務端配置監控埠,本地IDE連線遠端監聽埠進行除錯,一般除錯問題用這種方式。

被動連線除錯:本地IDE監聽某埠,等待遠端連線本地埠。一般用於遠端服務啟動不了,啟動時連線到本地除錯分析。

主動連線除錯

首先需要遠端服務配置啟動指令碼:

JAVA_OPTS="$JAVA_OPTS-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"

如果是啟動jar包,指令:

java -Xdebug-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 -jartest.jar 

這裡-Xdebug是通知JVM工作在DEBUG模式下,-Xrunjdwp是通知JVM使用(java debug wire protocol)來執行除錯環境。transport是監聽Socket埠連線方式(也可以dt_shmem共享記憶體方式,但限於windows機器,並且服務提供端和除錯端只能位於同一臺機)。server=y表示當前是除錯服務端,=n表示當前是除錯客戶端。suspend=n表示啟動時不中斷(如果啟動時中斷,一般用於除錯啟動不了的問題)。address=8000表示本地監聽8000埠。

idea中如下圖所示進行配置即可啟動debug模式進行除錯啦~



小貼士:記得在遠端配置完引數後對該專案程序重啟喔~(當然一定要保證遠端環境的程式碼和本地的程式碼一樣,否則打上斷點後顯示為X,如果打上斷點後既不顯示X也不顯示√,說明遠端的埠有問題,只需重新關閉該程序再次開啟即可)