日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

 gyb98 2011-03-30

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

利用 Eclipse IDE 的強大功能遠程調試 Java 應用程序

Charles Lu, 軟件工程師, IBM

簡介: 在本地計算機上調試 Java? 應用程序并不是惟一的選擇。學習如何使用構成遠程調試的不同連接類型進行遠程調試。本文概述了設置遠程應用程序調試的特性和示例。

本文的標簽:  debugeclipse

發(fā)布日期: 2009 年 1 月 12 日 
級別: 中級 其他語言版本: 英文 
訪問情況 5020 次瀏覽 
建議: 0 (添加評論)

1 star2 stars3 stars4 stars5 stars 平均分 (共 9 個評分 )

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

先決條件

啟動配置類型

啟動配置 保存一組用于啟動程序的屬性。啟動配置類型是一種可以在 Eclipse 平臺上啟動的獨特程序。

如果您還沒安裝該程序,請下載 Eclipse V3.4(Ganymede)。在 Ganymede 中,套接字(socket)監(jiān)聽連接器被添加到 Remote Java Application 啟動配置類型。Eclipse 最新的套接字監(jiān)聽連接器允許您打開 Java 調試器,它能夠監(jiān)聽特定套接字上的連接??梢詮拿钚羞x項打開被調試的程序,并將其連接到調試器。在 Ganymede 發(fā)布之前,僅有一個連接套接字的連接器,被調試的程序所在的機器必須是一個與調試器相連的調試主機。由于受到內存和 CPU 不足的限制,要想讓移動設備充當主機是不現(xiàn)實的。

為了進行遠程調試,必須使用 Java Virtual Machine (JVM) V5.0 或更新版本,比如 IBM? J9 或 Sun Microsystem 的 Java SE Development Kit(JDK)。本文主要討論遠程調試,而不是每個 Eclipse 調試特性的細節(jié)。查看 參考資料 獲得更多關于使用 Eclipse 進行調試的信息,并且可以找到上面提到的軟件。

JPDA 簡介

常用縮寫詞

  • JDI — Java 調試接口(Java Debug Interface)
  • JDT — Java 開發(fā)工具(Java Development Tools)
  • JDWP — Java 調試網絡協(xié)議(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) 技術是一個多層架構,使您能夠在各種環(huán)境中輕松調試 Java 應用程序。JPDA 由兩個接口(分別是 JVM Tool Interface 和 JDI)、一個協(xié)議(Java Debug Wire Protocol)和兩個用于合并它們的軟件組件(后端和前端)組成。它的設計目的是讓調試人員在任何環(huán)境中都可以進行調試。JPDA 不僅能夠用于桌面系統(tǒng),而且能夠在嵌入式系統(tǒng)上很好地工作。

JVM Tool Interface (JVMTI) 規(guī)定必須為調試提供 VM(編輯注:從 Java V5 開始,將用 JVMTI 代替 Java V1.4 中的 JVMDI)。Java Debug Wire Protocol (JDWP) 描述調試信息的格式,以及在被調試的進程和調試器前端之間傳輸?shù)恼埱?,調試器前端實現(xiàn) JDI,比如 Eclipse、Borland JBuilder 等。根據 Sun 的 JPDA 規(guī)范,被調試的程序常常稱為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 應該都能協(xié)調工作。通過這個客戶機-服務器架構,您可以從運行該平臺的本地工作站調試 Java 程序,甚至還可以通過網絡進行遠程調試。

在討論調試場景之前,我們先了解 JPDA 規(guī)范中的兩個術語:連接器和傳輸。連接器是一個 JDI 抽象,用來在調試器應用程序和目標 VM 之間建立連接。傳輸定義應用程序如何進行訪問,以及數(shù)據如何在前端和后端之間傳輸。連接器 “映射” 到可用的傳輸類型和連接模式。在 Sun 的 JPDA 參考實現(xiàn)中,為 Microsoft? Windows? 提供了兩個傳輸機制:套接字傳輸和共享內存?zhèn)鬏???捎玫倪B接器:

  • 連接套接字連接器
  • 連接共享內存連接器
  • 監(jiān)聽套接字連接器
  • 監(jiān)聽共享內存連接器
  • 啟動命令行連接器

在調試器應用程序和目標 VM 之間建立連接時,有一端將用作服務器并監(jiān)聽連接。隨后,另一端將連接到監(jiān)聽器并建立一個連接。通過連接,調試器應用程序或目標 VM 都可以充當服務器。進程之間的通信可以在同一個機器或不同的機器上運行。

要遠程調試 Java 程序,難點不是在調試器的前端,而是遠程 Java 后端。不幸的是,Eclipse 幫助系統(tǒng)中為這方面提供的信息并不多。事實上,JDI 和 JVMTI 是分別由 Eclipse 和 Java 運行時環(huán)境實現(xiàn)的。我們僅需要考慮 JDMP,因為它包含與 JVMTI 和 JDI 進行通信所需的信息。JDWP 包含許多參數(shù),用于為遠程 Java 應用程序調用所需的程序。以下是本文用到的一些參數(shù)。

-Xdebug
啟用調試特性。
-Xrunjdwp:<sub-options>
在目標 VM 中加載 JDWP 實現(xiàn)。它通過傳輸和 JDWP 協(xié)議與獨立的調試器應用程序通信。下面介紹一些特定的子選項。

從 Java V5 開始,您可以使用 -agentlib:jdwp 選項,而不是 -Xdebug 和 -Xrunjdwp。但如果連接到 V5 以前的 VM,只能選擇 -Xdebug 和 -Xrunjdwp。下面簡單描述 -Xrunjdwp 子選項。

transport
這里通常使用套接字傳輸。但是在 Windows 平臺上也可以使用共享內存?zhèn)鬏敗?/dd>
server
如果值為 y,目標應用程序監(jiān)聽將要連接的調試器應用程序。否則,它將連接到特定地址上的調試器應用程序。
address
這是連接的傳輸?shù)刂?。如果服務器?nbsp;n,將嘗試連接到該地址上的調試器應用程序。否則,將在這個端口監(jiān)聽連接。
suspend
如果值為 y,目標 VM 將暫停,直到調試器應用程序進行連接。

要獲得每個調試設置的詳細解釋,請參考 JPDA 文檔(參見 參考資料)。

清單 2 是一個示例,顯示如何在調試模式下啟動 VM 并監(jiān)聽端口 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 包中實現(xiàn)。本文不詳細討論 JDI 實現(xiàn)。參見 參考資料 獲得關于 Eclipse JDT 和 Java JDI 技術的信息。

我們首先應該知道要使用哪個 Eclipse 連接器。要了解 Eclipse 提供的遠程連接類型,您可以轉到 Eclipse 菜單并選擇 Run > Debug Configurations...,在 Remote Java Application 中添加一個啟動配置,然后從下拉列表中選擇連接器。在 Ganymede 中共有兩個連接器:

  • Socket Attach
  • Socket Listen

對于監(jiān)聽套接字的連接器,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 中的調試選項 
 

遠程調試應用程序

現(xiàn)在,我們已經準備好遠程調試應用程序。我們分步執(zhí)行:

1. 使用簡單類創(chuàng)建一個 Java 項目
我們?yōu)檎{試創(chuàng)建一個簡單類。清單 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 中設置斷點
 
3. 從本地調試應用程序
在調試應用程序之前,確保已經為項目啟用圖 1 中描述的調試選項。從本地調試應用程序是沒有必要的,但是這可以確保是否所有調試信息都可用。右鍵單擊 Java 項目,并選擇 Debug As,然后選擇 Java Application(參見圖 3)。如果應用程序在斷點處停止執(zhí)行,則表明調試信息正確顯示。這時,可以繼續(xù)使用這些調試特性,比如顯示調試堆棧、變量或斷點管理等等。

圖 3. 從本地調試應用程序
 
4. 導出 Java 項目
我們將使用這個應用程序作為調試目標。右鍵單擊 Java 項目,選擇 Export,然后選擇 Java,最后選擇 JAR file 或Runnable JAR file 導出項目。將在指定的位置生成 JAR 文件。注意,如果 Java 源代碼與目標應用程序不匹配,調試特性將不能正常工作。
5. 手動運行 Java 應用程序
打開控制臺手動啟動應用程序,確保正確配置了 Java 運行時環(huán)境。

清單 5. 調用 Java 應用程序的示例
				
java -jar test.jar

6. 遠程調試應用程序
將 JAR 文件復制到遠程計算機或同一臺計算機上的適當位置,調用調試服務器,然后為它添加一個客戶機。簡單的 Java 應用程序就可以充當調試服務器或客戶機。您可以在 Eclipse 中選擇 Socket Attach 或 Socket Listen 連接類型,這取決于特定的配置。接下來的兩個小節(jié)將學習如何將應用程序作為服務器或客戶機運行。

作為調試服務器的目標 VM

下面這個示例遠程調用 Java 應用程序作為調試服務器,并在端口 8000 監(jiān)聽套接字連接。目標 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。從最新創(chuàng)建的啟動配置中為目標應用程序指定 IP 和端口。為了在同一臺機器上運行遠程應用程序,僅需將主機 IP 指定為 localhost 或 127.0.0.1。


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

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


圖 5. Eclipse 中的 Terminate 按鈕
 

作為調試客戶機的目標 VM

第二個示例使用一個簡單的 Java 應用程序作為調試客戶機,并且調試器前端作為調試服務器。Eclipse 使用套接字監(jiān)聽模式連接類型進行監(jiān)聽。必須先啟動調試前端來監(jiān)聽特定的端口。圖 6 給出一個用于設置監(jiān)聽的示例配置。


圖 6. 監(jiān)聽套接字連接的配置
 

單擊 Eclipse Debug 按鈕,狀態(tài)欄將顯示消息 “waiting for vm to connect at port 8000...”。看到這個消息后,啟動遠程應用程序。清單 7 顯示了如何將 Java 應用程序作為調試客戶機并調用它,然后使用端口 8000 上的主機 127.0.0.1 的套接字將其連接到一個正在運行的調試器應用程序。


清單 7. Eclipse 監(jiān)聽套接字連接模式中的 VM 調用示例
				
    java -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000,suspend=y 
         -jar test.jar 

如果一切進行順利,將會顯示一個調試透視圖幫助調試應用程序,并且遠程 Java 應用程序將正常停止。這類似于步驟 3 中的本地調試(參見圖 3)。在這里,您可以使用標準的調試特性,比如設置斷點和值、單步執(zhí)行等。

結束語

本文演示如何使用 Eclipse 內置的遠程 Java 應用程序配置類型對應用程序執(zhí)行遠程調試。介紹了如何設置 Java 應用程序以調用遠程調試,并幫助您理解 Eclipse 提供的連接器。最后,您還學習了如何將這些技術應用到項目中。


參考資料

學習

獲得產品和技術

討論

  • Eclipse Platform 新聞組 應當是討論關于 Eclipse 的問題的第一站(選擇此鏈接將啟動默認的 Usenet 新聞閱讀器應用程序并打開 eclipse.platform)。

  • Eclipse 新聞組 為對使用和擴展 Eclipse 感興趣的人員提供了許多參考資料。

  • 參與 developerWorks blogs 并加入 developerWorks 社區(qū)。

關于作者

Charles Lu 是 IBM China Software Development Lab 的軟件開發(fā)人員,目前從事 IBM Lotus Expeditor 的開發(fā)。他感興趣的領域包括設備編程、即時消息和語音技術。

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多