首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Eclipse 遠程調試 Java 應用完整指南

     編輯:Java 相關知識

前言

遠程調試是 Java 開發中不可或缺的技能,特別適用於:生產環境問題排查、嵌入式/行動裝置開發、無法安裝 IDE 的伺服器環境。本文基於 Eclipse (Ganymede/V3.4+) 與 JPDA 架構,詳細講解 Socket Attach 與 Socket Listen 兩種連線模式的配置與實戰操作。

核心原理:JPDA 架構

Java Platform Debugger Architecture (JPDA) 採用客戶端-伺服器模型:

  • JVMTI (JVM Tool Interface):JVM 內部提供的偵錯介面(Java 5+ 取代 JVMDI)。
  • JDWP (Java Debug Wire Protocol):定義前後端通訊協定與資料格式。
  • JDI (Java Debug Interface):IDE(如 Eclipse)實作的高層 Java API。

通訊雙方透過「連接器」建立連線,傳輸層支援 Socket 或 Shared Memory(Windows)。

JVM 啟動偵錯參數詳解

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=y
參數說明
transportdt_socket(網路通訊)或 dt_shmem(Windows 共享記憶體)
server=y/ny:目標 JVM 為 Server 監聽端口;n:目標 JVM 主動連接調試器
addressIP:Port,server=y 時為監聽端口;server=n 時為調試器地址
suspend=y/ny:JVM 啟動後暫停等待調試器連接;n:立即執行

Java 5+ 建議使用 -agentlib:jdwp=... 替代 -Xdebug -Xrunjdwp。

Eclipse 遠程調試配置:兩種模式

模式一:Socket Attach(最常用)

目標 JVM = Server,Eclipse = Client

  1. 目標機器啟動應用:
    java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000 -jar app.jar
  2. Eclipse:Run > Debug Configurations > Remote Java Application 新建配置
  3. Connection Type 選 Socket Attach
  4. Host 填目標 IP(本機用 localhost),Port 填 8000
  5. 勾選 Allow termination of remote VM 可從 Eclipse 終止遠程進程
  6. 點擊 Debug,即在斷點處暫停

模式二:Socket Listen(適合行動/嵌入式裝置)

Eclipse = Server,目標 JVM = Client

  1. Eclipse 先啟動監聽:Debug Configurations > Remote Java Application > Connection Type 選 Socket Listen,Port 8000
  2. Console 顯示 waiting for vm to connect at port 8000...
  3. 目標機器啟動:
    java -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000,suspend=y -jar app.jar
  4. 連線建立後,自動切換至 Debug 視圖

前置準備與常見坑

  • 編譯含偵錯資訊:Eclipse Window > Preferences > Java > Compiler 勾選「Add variable attributes」與「Add line number attributes」。
  • 原始碼同步:遠程調試的 JAR 必須與工作區原始碼版本一致,否則斷點無法命中或顯示錯誤行。
  • 防火牆:確保雙向通訊端口未被阻擋。
  • 多執行緒:Debug 視圖可切換執行緒堆疊,支援條件斷點、監看表達式、熱代碼替換(HCR)。

實戰範例:簡單類別遠程調試

package com.ibm.developerWorks.debugtest;
public class test {
    public static void main(String[] args) {
        System.out.println("This is a test.");  // 在此行設斷點
    }
}
  1. 本地先 Debug As > Java Application 驗證斷點生效。
  2. Export > Runnable JAR 產生 test.jar。
  3. 複製至遠程機器,依上述模式啟動並連接。

總結

掌握 server=y/n 與 suspend=y/n 的組合,靈活選擇 Attach 或 Listen 模式,即可應對從本地開發到生產環境、嵌入式裝置的各種遠程調試場景。Eclipse 強大的 JDI 實作讓遠程調試體驗幾乎等同本地。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved