【IT168 技術】在軟體開發中,調試是不可或缺的一個環節,它可以協助開發人員提高效率,節省開發時間。在我認為,本地調試是最優選擇,通常情況下,當無法實現本地調試時,我們才會考慮遠端偵錯。
有些項目是運行在Linux 作業系統上,而我們大多數項目是在Windows 平台上完成開發的。特別是在投資銀行領域,很多電子交易程式運行在Linux 伺服器上,這會讓開發過程顯得較為繁瑣,因為我們沒法在本地的開發環境中運行這些代碼。
有時候無論是出於開發還是調試的考慮,我們可以讓項目運行在Windows 平台上,但有時候,一些不可控因素,比如您的項目需要提供開發庫的平台,或者需要一些Linux模組,Windows平台上無法滿足這些需求,或者您的項目規模太大,無法在Windows 平台上成功運行,由於項目過度依賴一些系統,沒法在Windows 開發平台中建立相同的運行環境。
這種情況下,我的解決方案是藉助類比的對象來測試專案。當然,有時候通過線程單獨來運行應用程式模組並不見得是最好的解決方案,特別是您需要在運行時環境下通過調試項目來尋找一些子問題,這些方法就會顯得不太實用。
Eclipse為我們提供了最有用的功能,稱為“遠端偵錯”。藉助於遠端偵錯,您可以在Windows 平台上調試Linux的運行情況,為了提高開發效率,非常有必要瞭解清楚如何安裝遠端偵錯,如何在Eclipse中實現遠端偵錯。
如何在Eclipse中安裝遠端偵錯
1)在Eclipse中安裝Java項目
2) 選擇項目,在“Run”菜單選項下選擇“Debug Configurations”
Remote debugging with Eclipse 1
3) 調試配置視窗將會彈出,選擇左邊的“Remote Java Application”表徵圖,右鍵選擇“New”。
Eclipse remote debugging 2
4) 點擊“New”以後,Eclipse會為您選中的項目建立遠程Java應用配置。接下來的一步是為遠端偵錯安裝主機和連接埠。
Remote debugging in Eclipse 3
5) 現在輸入主機名稱和連接埠,如果你想從Eclipse中關閉運行在Linux平台上的 Java應用程式,請選中"Allow termination of remote VM”複選框。
6) 在調試之前,確保設定好Java進程的各項調試資訊,同時確保在同一個主機和連接埠上監聽Java進程,否則Eclipse無法正常建立連繫。
7) 點擊“Debug”開始調試主機和連接埠。
8)您也可以在"Remote Java Application” 中,"Debug Configurations"菜單下選中您的項目,然後點擊"DEBUG"。
為了遠端偵錯一個Java應用程式,確保JVM的調試選項如下:
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8001,server=y suspend=y -jar stockTradingGUI.jar
使用Java Debug Wire Protocol (jdwp) protocol ,我們可以讓Java應用程式stockTradingGUI進入偵錯模式,監聽連接埠為8001。suspend=y 時,Eclipse 將應用程式串連到指定調試連接埠後,應用程式才開始運行。
有一點非常重要,先運行應用程式,然後串連它,否則Eclipse會拋出異常"Failed to connect to remote VM. Connection refused”.
提示一:在JVM DEBUG參數中,有一個參數叫"suspend",它的取值有兩個,“y”或者“n”,如果您剛開始就想調試的話,將參數設定為"suspend=y",這樣Eclipse會遠端連線Java應用程式。
如果你想先運行項目,然後串連Eclipse,那麼可以將參數設定為"suspend=n",這樣的話,Java應用程式會正常運行,之後Eclipse會開始遠端連線。
提示二:使用啟動指令碼輸入JVM調試參數,在指令碼中使用變數isDebugEnabled或者REMOTE_DEBUG_PORT,當你想遠端偵錯Java應用程式的時候,可以將這個變數匯出。整個操作過程非常簡單,只需要一次性的安裝即可。
提示三:如果你得到錯誤提示"Failed to connect to remote VM. Connection refused"或者"Connection refused: connect",那麼可能出現的原因有兩種可能。第一是您的Java項目沒有運行在遠程主機上,第二是輸入連接埠和主機名稱有誤,驗證成功後,可以填寫完整的主機名稱。
提示四:您也要確保本地Eclipse和遠程Eclipse啟動並執行是相同的程式碼程式庫。使用調試選項"-g"可以編譯代碼,Eclipse可以輕鬆搜集調試資訊,比如本地變數的調試資訊,預設情況下,使用調試選項“-g”,類檔案可能更大,因為它可能會包含一些調試資訊。