eclipse遠程debug,java項目

  1. 首先java項目要支付可遠程調試獲得啓動時加入參數前端

    啓動遠程調試java

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=可用於遠程調試端口

       啓用JMX,遠程性能觀察後端

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=9999                      #可用於遠程JMS端口
-Dcom.sun.management.jmxremote.ssl=false                      #是否採用SSL
-Dcom.sun.management.jmxremote.authenticate=false             #是否安全校驗
-Djava.rmi.server.hostname=10.10.9.221                        #使用IP

 

eclipse配置安全

其中:host爲遠程java程序提供遠程調試的IP,post爲遠程java程序提供遠程調試的端口服務器

使用 Eclipse 遠程調試 Java 應用程序

摘抄:http://www.ibm.com/developerworks/cn/opensource/os-eclipse-javadebug/網絡

 

遠程調試對應用程序開發十分有用。例如,爲不能託管開發平臺的低端機器開發程序,或在專用的機器上(好比服務不能中斷的 Web 服務器)調試程序。其餘狀況包括:運行在內存小或 CUP 性能低的設備上的 Java 應用程序(好比移動設備),或者開發人員想要將應用程序和開發環境分開,等等。架構

先決條件

啓動配置類型

啓動配置 保存一組用於啓動程序的屬性。啓動配置類型是一種能夠在 Eclipse 平臺上啓動的獨特程序。eclipse

如 果您還沒安裝該程序,請下載 Eclipse V3.4(Ganymede)。在 Ganymede 中,套接字(socket)監聽鏈接器被添加到 Remote Java Application 啓動配置類型。Eclipse 最新的套接字監聽鏈接器容許您打開 Java 調試器,它可以監聽特定套接字上的鏈接。能夠從命令行選項打開被調試的程序,並將其鏈接到調試器。在 Ganymede 發佈以前,僅有一個鏈接套接字的鏈接器,被調試的程序所在的機器必須是一個與調試器相連的調試主機。因爲受到內存和 CPU 不足的限制,要想讓移動設備充當主機是不現實的。socket

爲了進行遠程調試,必須使用 Java Virtual Machine (JVM) V5.0 或更新版本,好比 IBM® J9 或 Sun Microsystem 的 Java SE Development Kit(JDK)。本文主要討論遠程調試,而不是每一個 Eclipse 調試特性的細節。查看 參考資料 得到更多關於使用 Eclipse 進行調試的信息,而且能夠找到上面提到的軟件。工具

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

回頁首

Eclipse 中的遠程調試特性

Eclipse 是一個圖形化 Java 調試器前端。JDI 在 org.eclipse.jdt.debug 包中實現。本文不詳細討論 JDI 實現。參見 參考資料 得到關於 Eclipse JDT 和 Java JDI 技術的信息。

咱們首先應該知道要使用哪一個 Eclipse 鏈接器。要了解 Eclipse 提供的遠程鏈接類型,您能夠轉到 Eclipse 菜單並選擇 Run > Debug Configurations...,在 Remote Java Application 中添加一個啓動配置,而後從下拉列表中選擇鏈接器。在 Ganymede 中共有兩個鏈接器:

  • Socket Attach

  • Socket Listen

對 於監聽套接字的鏈接器,Eclipse VM 將是與遠程 Java 應用程序鏈接的主機。對於鏈接套接字的鏈接器,目標 VM 將做爲主機。這兩種鏈接器對應用程序調試沒有影響,用戶能夠任意選擇。但根據經驗,須要使用速度更快、更強大的計算機做爲 VM 調試主機,由於須要計算的資源不少。

在調試 Java 應用程序以前,須要確保已經爲遠程應用程序啓用全部調試選項。若是選項信息不可用,您將收到一個錯誤信息,好比 「Debug information is not available」 或 「Unable to install breakpoint due to missing line number」。您能夠經過更改 Eclipse 菜單上的 Window > Preferences > Java > Compiler 來修改設置。

圖 1. Eclipse 中的調試選項

Eclipse 中的調試選項

回頁首

遠程調試應用程序

如今,咱們已經準備好遠程調試應用程序。咱們分步執行:

  • 1. 使用簡單類建立一個 Java 項目

  • 咱們爲調試建立一個簡單類。清單 4 給出了示例代碼。

清單 4. 調試示例代碼

package com.ibm.developerWorks.debugtest;

public class test {

public static void main(String[] args) {
System.out.println("This is a test.");
}
}
  • 2. 設置一個斷點

  • 在代碼中設置一個斷點。在這個例子中,咱們在 System.out.println("This is a test."); 這行中設置斷點。

圖 2. 在 Eclipse 中設置斷點

在 Eclipse 中設置斷點

  • 3. 從本地調試應用程序

  • 在調試應用程序以前,確保已經爲項目啓用圖 1 中描述的調試選項。從本地調試應用程序是沒有必要的,可是這能夠確保是否全部調試信息均可用。右鍵單擊 Java 項目,並選擇 Debug As,而後選擇 Java Application(參見圖 3)。若是應用程序在斷點處中止執行,則代表調試信息正確顯示。這時,能夠繼續使用這些調試特性,好比顯示調試堆棧、變量或斷點管理等等。

圖 3. 從本地調試應用程序

從本地調試應用程序

  • 4. 導出 Java 項目

  • 咱們將使用這個應用程序做爲調試目標。右鍵單擊 Java 項目,選擇 Export,而後選擇 Java,最後選擇 JAR fileRunnable JAR file 導出項目。將在指定的位置生成 JAR 文件。注意,若是 Java 源代碼與目標應用程序不匹配,調試特性將不能正常工做。

  • 5. 手動運行 Java 應用程序

  • 打開控制檯手動啓動應用程序,確保正確配置了 Java 運行時環境。

清單 5. 調用 Java 應用程序的示例

java -jar test.jar
  • 6. 遠程調試應用程序

  • 將 JAR 文件複製到遠程計算機或同一臺計算機上的適當位置,調用調試服務器,而後爲它添加一個客戶機。簡單的 Java 應用程序就能夠充當調試服務器或客戶機。您能夠在 Eclipse 中選擇 Socket AttachSocket Listen 鏈接類型,這取決於特定的配置。接下來的兩個小節將學習如何將應用程序做爲服務器或客戶機運行。

做爲調試服務器的目標 VM

下面這個示例遠程調用 Java 應用程序做爲調試服務器,並在端口 8000 監聽套接字鏈接。目標 VM 將暫停,直到調試器鏈接。

清單 6. Eclipse 鏈接套接字模式下的 VM 調用示例

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address="8000" -jar 
     test.jar

使用遠程啓動配置啓動 Eclipse,並指定遠程應用程序的目標 VM 地址。爲此,單擊 Run > Debug Configurations,而後在 Eclipse 菜單中雙擊 Remote Java Application。從最新建立的啓動配置中爲目標應用程序指定 IP 和端口。爲了在同一臺機器上運行遠程應用程序,僅需將主機 IP 指定爲 localhost 或 127.0.0.1。

圖 4. 鏈接套接字鏈接的配置

鏈接套接字鏈接的配置

選擇 Allow termination of remote VM 選項終止在應用程序調試期間鏈接的 VM。

圖 5. Eclipse 中的 Terminate 按鈕

Eclipse 中的 Terminate 按鈕

做爲調試客戶機的目標 VM

第二個示例使用一個簡單的 Java 應用程序做爲調試客戶機,而且調試器前端做爲調試服務器。Eclipse 使用套接字監聽模式鏈接類型進行監聽。必須先啓動調試前端來監聽特定的端口。圖 6 給出一個用於設置監聽的示例配置。

圖 6. 監聽套接字鏈接的配置

監聽套接字鏈接的配置

單擊 Eclipse Debug 按鈕,狀態欄將顯示消息 「waiting for vm to connect at port 8000...」。看到這個消息後,啓動遠程應用程序。清單 7 顯示瞭如何將 Java 應用程序做爲調試客戶機並調用它,而後使用端口 8000 上的主機 127.0.0.1 的套接字將其鏈接到一個正在運行的調試器應用程序。

清單 7. Eclipse 監聽套接字鏈接模式中的 VM 調用示例

    java -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000,suspend=y 
         -jar test.jar

若是一切進行順利,將會顯示一個調試透視圖幫助調試應用程序,而且遠程 Java 應用程序將正常中止。這相似於步驟 3 中的本地調試(參見圖 3)。在這裏,您可使用標準的調試特性,好比設置斷點和值、單步執行等。

相關文章
相關標籤/搜索