Eclipse 進行遠端除錯Windows Tomcat配置
以前看到別人使用除錯遠端程式碼感覺好牛逼的樣子,前一段時間想學來著,但是由於實際工作中暫時沒有用上最終沒學會,好悲傷!今天終於需要用了,Google+Baidu了一堆,終於將Windows Tomcat遠端除錯給學會了,不吹牛逼了,進入正題。
1. 配置windows tomcat伺服器端:
這段程式碼的意思是配置Tomcat執行環境來啟用伺服器端遠端除錯功能,這裡就必須提到JPDA了(其實我也不太懂,就把其他大牛的博文貼下來了)rem*******設定Tomcat目錄*******-- set CATALINE_HOME=E:\V6.0\ApacheJetspeed E: rem 8787為可用埠,為遠端除錯監聽埠-- cd %CATALINE_HOME%/bin set JPDA_ADDRESS=8787 set JPDA_TRANSPORT=dt_socket set CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787 startup
******************************************************華麗的分割線******************************************************
原文連結:http://www.ibm.com/developerworks/cn/opensource/os-eclipse-javadebug/
JPDA 簡介
常用縮寫詞
- JDI— Java 除錯介面(Java Debug Interface)
- JDT— Java 開發工具(Java Development Tools)
- JDWP— Java 除錯網路協議(Java Debug Wire Protocol)
- JPDA— Java 平臺偵錯程式架構(Java Platform Debugger Architecture)
- JVM— Java 虛擬機器(Java Virtual Machine)
- JVMDI— JVM 除錯介面(JVM Debug Interface)
- JVMTI— JVM 工具介面(JVM Tool Interface)
- VM— 虛擬機器(Virtual Machine)
Sun Microsystem 的 Java Platform Debugger Architecture (JPDA) 技術是一個多層架構,使您能夠在各種環境中輕鬆除錯 Java 應用程式。JPDA 由兩個介面(分別是 JVM Tool Interface 和 JDI)、一個協議(Java Debug Wire Protocol)和兩個用於合併它們的軟體元件(後端和前端)組成。它的設計目的是讓除錯人員在任何環境中都可以進行除錯。JPDA 不僅能夠用於桌面系統,而且能夠在嵌入式系統上很好地工作。
JVM Tool Interface (JVMTI) 規定必須為除錯提供 VM(編輯注:從 Java V5 開始,將用 JVMTI 代替 Java V1.4 中的 JVMDI)。Java Debug Wire Protocol (JDWP) 描述除錯資訊的格式,以及在被除錯的程序和偵錯程式前端之間傳輸的請求,偵錯程式前端實現 JDI,比如 Eclipse、Borland JBuilder 等。根據 Sun 的 JPDA 規範,被除錯的程式常常稱為 debuggee。JDI 是一個高階的介面,它定義用於遠端除錯的資訊和請求。下面給出了偵錯程式的架構。
清單 1. Java 平臺偵錯程式架構
Components Debugger Interfaces / |--------------| / | VM | debuggee -----( |--------------| <---- JVMTI - Java VM Tool Interface \ | back-end | \ |--------------| / | comm channel --( | <------------ JDWP - Java Debug Wire Protocol \ | / |--------------| / | front-end | debugger -----( |--------------| <---- JDI - Java Debug Interface \ | UI | \ |--------------|
因此,任何第三方工具和基於 JPDA 的 VM 應該都能協調工作。通過這個客戶機-伺服器架構,您可以從執行該平臺的本地工作站除錯 Java 程式,甚至還可以通過網路進行遠端除錯。
在討論除錯場景之前,我們先了解 JPDA 規範中的兩個術語:聯結器和傳輸。聯結器是一個 JDI 抽象,用來在偵錯程式應用程式和目標 VM 之間建立連線。傳輸定義應用程式如何進行訪問,以及資料如何在前端和後端之間傳輸。聯結器 “對映” 到可用的傳輸型別和連線模式。在 Sun 的 JPDA 參考實現中,為 Microsoft® Windows® 提供了兩個傳輸機制:套接字傳輸和共享記憶體傳輸。可用的聯結器:
- 連線套接字聯結器
- 連線共享記憶體聯結器
- 監聽套接字聯結器
- 監聽共享記憶體聯結器
- 啟動命令列聯結器
在偵錯程式應用程式和目標 VM 之間建立連線時,有一端將用作伺服器並監聽連線。隨後,另一端將連線到監聽器並建立一個連線。通過連線,偵錯程式應用程式或目標 VM 都可以充當伺服器。程序之間的通訊可以在同一個機器或不同的機器上執行。
要遠端除錯 Java 程式,難點不是在偵錯程式的前端,而是遠端 Java 後端。不幸的是,Eclipse 幫助系統中為這方面提供的資訊並不多。事實上,JDI 和 JVMTI 是分別由 Eclipse 和 Java 執行時環境實現的。我們僅需要考慮 JDMP,因為它包含與 JVMTI 和 JDI 進行通訊所需的資訊。JDWP 包含許多引數,用於為遠端 Java 應用程式呼叫所需的程式。以下是本文用到的一些引數。
- -Xdebug
- 啟用除錯特性。
- -Xrunjdwp:<sub-options>
- 在目標 VM 中載入 JDWP 實現。它通過傳輸和 JDWP 協議與獨立的偵錯程式應用程式通訊。下面介紹一些特定的子選項。
從 Java V5 開始,您可以使用 -agentlib:jdwp 選項,而不是 -Xdebug 和 -Xrunjdwp。但如果連線到 V5 以前的 VM,只能選擇 -Xdebug 和 -Xrunjdwp。下面簡單描述 -Xrunjdwp 子選項。
- transport
- 這裡通常使用套接字傳輸。但是在 Windows 平臺上也可以使用共享記憶體傳輸。
- server
- 如果值為 y,目標應用程式監聽將要連線的偵錯程式應用程式。否則,它將連線到特定地址上的偵錯程式應用程式。
- address
- 這是連線的傳輸地址。如果伺服器為 n,將嘗試連線到該地址上的偵錯程式應用程式。否則,將在這個埠監聽連線。
- suspend
- 如果值為 y,目標 VM 將暫停,直到偵錯程式應用程式進行連線。
要獲得每個除錯設定的詳細解釋,請參考 JPDA 文件(參見 參考資料)。
清單 2 是一個示例,顯示如何在除錯模式下啟動 VM 並監聽埠 8765 的套接字連線。
清單 2. 作為除錯伺服器的目標 VM
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8765
清單 3 顯示如何使用位於 8000 埠的主機 127.0.0.1 上的套接字連線執行中的偵錯程式應用程式。
清單 3. 作為除錯客戶機的目標 VM
-Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000******************************************************華麗的分割線******************************************************
2. 配置Eclipse遠端除錯:
2.1 Debug ->Debug Configurations;
2.2 硬菜來了:
2.3 Debug
3. 總結:
如果不想了解太多的話,我建議
3.1. 只需要將第一步的指令碼複製下來儲存到一個.bat檔案中;
3.2 按照如圖在Eclipse中配置
4. 注意:
4.1 指令碼中的E:是為了切換到CATALINE_HOME目錄中(可不要犯低階錯誤哦);
4.2 演示的【埠:8787】記住為空閒埠,可以任意修改;
4.3 可以使用命令:netstat -ano | findstr 8787檢測JPDA監聽埠是否正常開啟;
4.4 連線遠端主機時若無法連線遠端連線,很有可能是伺服器防火牆遮蔽了,window7環境配置埠過濾如下圖: