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

Eclipse 遠程調試 Tomcat 實戰指南:斷點、變量修改、表達式求值

     編輯:Java 相關知識

Eclipse 遠程調試 Tomcat 是 Java Web 開發必備技能。本文提供從啟動配置到斷點操作、熱替換、變量修改、表達式求值的完整操作指南,助你像調試本地主類一樣調試線上/測試環境代碼。

一、前置條件

  • Eclipse 已安裝 Web Tools Platform (WTP) 或 Tomcat 插件。
  • Tomcat 可在 Eclipse 內正常啟動/停止(Servers 視圖管理)。
  • 項目已部署到 Tomcat(Run As → Run on Server)。

二、啟用遠程調試模式啟動 Tomcat

方法 A:Eclipse Servers 視圖(推薦,圖形化)

  1. Servers 視圖雙擊 Tomcat 實例 → 打開配置編輯器。
  2. 勾選 「Enable remote debugging」 或在 Launch configuration 中添加 JVM 參數:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000
  1. 保存,右鍵 Tomcat → Debug 啟動(而非 Run)。
  2. Console 顯示 Listening for transport dt_socket at address: 8000 即成功。

方法 B:手動修改 catalina.sh/bat(通用)

# Linux/Mac: catalina.sh
export JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000"

# Windows: catalina.bat
set JAVA_OPTS=%JAVA_OPTS% -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000

然後在 Eclipse Run → Debug Configurations → Remote Java Application 新建配置:Host=localhost, Port=8000,點擊 Debug 連接。

三、斷點設置與命中

  1. 在 Java 源碼行號左側雙擊或右鍵 Toggle Breakpoint 設置斷點(藍色圓點)。
  2. 瀏覽器訪問對應功能頁面,執行到斷點行時,Eclipse 自動切換到 Debug 透視圖,線程狀態變為 Suspended。
  3. 條件斷點:右鍵斷點 → Breakpoint Properties → 勾選 Conditional → 輸入表達式(如 user.getId() == 1001),僅滿足條件時掛起。

四、核心調試快捷鍵(Debug 透視圖生效)

快捷鍵動作說明
F8Resume (繼續執行)運行到下一個斷點或程序結束
F5Step Into (單步進入)進入方法內部,逐行執行
F6Step Over (單步跳過)執行當前行,不進入方法內部
F7Step Return (單步返回)執行完當前方法剩餘代碼,返回調用處
Ctrl+Shift+BToggle Breakpoint快速設置/移除斷點
Ctrl+Shift+IInspect (檢查表達式值)選中表達式彈窗顯示值
Ctrl+Shift+DDisplay (執行表達式)在 Display 視圖執行代碼片段

五、運行時修改變量值

  1. 在 Variables 視圖找到目標變量(局部/實例/靜態)。
  2. 右鍵 → Change Value... (或 Ctrl+Shift+V)。
  3. 彈出對話框輸入新值(字符串帶引號,對象輸入 new ClassName() 或現有對象 ID)。
  4. 確定後,後續代碼將使用新值執行,**極其強大**可模擬邊界場景、重現難以構造的 Bug。

六、表達式求值與監視

  • Inspect:選中代碼片段(如 userService.findById(1)) → 右鍵 Inspect → 結果顯示在浮動窗口/Expressions 視圖。
  • Watch (Expressions 視圖):右鍵空白處 → Add Watch Expression → 輸入表達式(如 list.size() > 0),每次掛起自動求值顯示。
  • Display 視圖:Window → Show View → Display,可編寫任意代碼片段執行(如創建對象、調用靜態方法、修改集合),類似 REPL。

七、熱代碼替換

  • 修改方法體內代碼(不可修改方法簽名、字段、類結構) → Ctrl+S 保存 → Eclipse 自動熱替換到 JVM(Console 顯示 Hot code replace)。
  • 失效場景:添加/刪除方法、修改類繼承、修改註解屬性 → 需重啟 Tomcat。
  • 提升熱替換成功率:使用 DCEVM + HotswapAgent(開源 JVM 修改版),支持結構性變更熱替換。

八、Source Not Found 解決

調試進入無源碼類(如第三方 Jar、JDK 類)時提示 Source not found:

  1. 點擊 Attach Source... 按鈕。
  2. 選擇 External Folder 或 External Archive 指向源碼目錄/JAR(如 rt.jar 對應 src.zip,Maven 依賴右鍵 Maven → Download Sources)。
  3. 或全局配置:Window → Preferences → Java → Debug → Source Lookup Path 添加項目源碼路徑。

九、JSP 調試

  • JSP 編譯為 Servlet 類,源碼在 work/Catalina/localhost//org/apache/jsp/。
  • Eclipse WTP 支持直接在 JSP 文件設置斷點,自動映射到編譯後 Servlet 對應行。
  • 若失效,手動在 Debug Configurations → Source 添加 JSP 編譯輸出目錄。

十、生產環境調試安全準則

  1. 嚴禁生產環境直接遠程調試:掛起線程會阻塞請求,導致服務不可用。
  2. 使用 Arthas / Greys / Java Flight Recorder 無侵入式診斷生產問題。
  3. 遠程調試端口 僅綁定內網 IP,防火牆限制訪問源,嚴禁暴露公網。
  4. 調試結束及時 斷開連接(Debug 視圖紅色方塊 Terminate),釋放 JVM 調試資源。

熟練掌握 Eclipse 遠程調試,能將定位 Bug 時間從小時級壓縮到分鐘級。核心口訣:斷點精準、變量可改、表達式可執行、熱替換可驗證,讓調試成為理解代碼運行真相的顯微鏡。

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