<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    爪哇一角

    共同探討STRUTS#HIBERNATE#SPRING#EJB等技術
    posts - 3, comments - 6, trackbacks - 0, articles - 99
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Eclipse的遠程調試

    Posted on 2009-02-23 13:52 非洲小白臉 閱讀(1464) 評論(0)  編輯  收藏 所屬分類: 其他資源
    在本地計算機上調試 Java™ 應用程序并不是惟一的選擇。學習如何使用構成遠程調試的不同連接類型進行遠程調試。本文概述了設置遠程應用程序調試的特性和示例。

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

    先決條件

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

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

    為了進行遠程調試,必須使用 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 file 或 Runnable JAR file 導出項目。將在指定的位置生成 JAR 文件。注意,如果 Java 源代碼與目標應用程序不匹配,調試特性將不能正常工作。
    5. 手動運行 Java 應用程序
    打開控制臺手動啟動應用程序,確保正確配置了 Java 運行時環境。

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

    6. 遠程調試應用程序
    將 JAR 文件復制到遠程計算機或同一臺計算機上的適當位置,調用調試服務器,然后為它添加一個客戶機。簡單的 Java 應用程序就可以充當調試服務器或客戶機。您可以在 Eclipse 中選擇 Socket Attach 或 Socket 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)。在這里,您可以使用標準的調試特性,比如設置斷點和值、單步執行等。




    注意:一定是自己編譯的src才可。即:src要與調試的程序一致。

    結束語

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

    主站蜘蛛池模板: 国产精品亚洲片在线| 中文字字幕在线高清免费电影| 亚洲国产另类久久久精品 | 亚洲人成网站在线播放vr| 毛片a级毛片免费播放100| 国产成人精品一区二区三区免费| 免费看又黄又爽又猛的视频软件| 亚洲视频一区二区三区四区| 亚洲AV人无码综合在线观看| 国产国拍精品亚洲AV片| 免费国产在线观看老王影院| 女人被弄到高潮的免费视频| 五月婷婷在线免费观看| 免费精品无码AV片在线观看| a级毛片毛片免费观看久潮喷| 男女猛烈xx00免费视频试看| 亚洲av日韩av永久无码电影| 亚洲一线产品二线产品| 亚洲中文字幕人成乱码 | 久久久久久影院久久久久免费精品国产小说| 精品国产亚洲第一区二区三区| 亚洲欧洲日韩国产一区二区三区| 18gay台湾男同亚洲男同| 亚洲av福利无码无一区二区| 亚洲精品二区国产综合野狼 | 9久热精品免费观看视频| 老司机午夜精品视频在线观看免费 | 亚洲综合日韩中文字幕v在线| 亚洲国产精品无码中文字| 中文字幕亚洲无线码a| 亚洲视频在线一区二区| 亚洲国产成人乱码精品女人久久久不卡 | 四虎在线播放免费永久视频| 国产嫩草影院精品免费网址| 国产免费啪嗒啪嗒视频看看| 国产成人免费a在线视频色戒| 成人免费无码精品国产电影| 国产精品国产午夜免费福利看| 午夜国产羞羞视频免费网站| www.亚洲色图| 国产精品亚洲不卡一区二区三区|