常見原因與解決方案
- 方法斷點:在方法宣告行(`public void foo()`)打斷點會導致**每次進入該方法**都暫停,極大拖慢速度。
- **解決**:移除方法斷點,改在方法內部具體行打行斷點。
- 檢查:`View` → `Breakpoints` (Ctrl+Shift+F8) → 取消勾選 "Method breakpoints"。
- 條件斷點/日誌斷點過多:每次命中需評估條件表達式。
- **解決**:減少條件斷點,改用普通斷點 + 手動檢查。
- 資料檢視/監視表達式複雜:Debug 面板顯示大型集合、呼叫 `toString()` 耗時。
- **解決**:關閉不必要的監視表達式,折疊變數樹,避免展開大型 List/Map。
- 遠端除錯網路延遲:本地 IDE 連接遠端 JVM。
- **解決**:確保網路通暢,增加 `timeout` 參數,或改用本地除錯。
- JVM 參數:除錯模式下 JVM 停用 JIT 編譯、啟用檢查,本身比 Release 慢。
- **解決**:接受合理差距,或在 `Run/Debug Configurations` → `VM options` 加入 `-XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints`(進階)。
- IDEA 版本/索引問題:舊版本或索引損壞。
- **解決**:`File` → `Invalidate Caches / Restart`,升級至最新穩定版。
快速排查步驟
1. 檢查 Breakpoints 面板,移除所有方法斷點。
2. 清空 Watches 面板。
3. 關閉 "Show method return values" (Settings → Build,Execution,Deployment → Debugger → Data Views)。
4. 嘗試簡單類別除錯,隔離是否為專案特定問題。
5. 對比 Eclipse:Eclipse 預設不啟用方法斷點,故較快。
最佳實踐
- **原則**:只在懷疑出錯的具體行打斷點,不用「廣撒網」。
- **技巧**:使用 `Evaluate Expression` (Alt+F8) 動態執行片段,避免重啟除錯。
- **熱插拔**:修改方法體後 `Build` → `Reload Changed Classes` (Ctrl+Shift+F9),無需重啟除錯會話。
結論
90% 的 IDEA Debug 慢是**方法斷點**導致。移除方法斷點、精簡監視表達式、善用熱插拔,速度可追平 Eclipse。