四階段排查法
- 復現與定義
最小復現步驟、環境版本、錯誤堆棧、日志關鍵字。寫下「預期行為」與「實際行為」的差異。
- 範圍收斂
- 二分法:註釋/回滾一半代碼,觀察現象消失/保留。
- 日志埋點:關鍵分支打印入參、狀態、返回值。
- 工具:Arthas/JProfiler 熱點、內存、線程分析;
jstack 死鎖排查。
- 根因定位
常見根因清單:
併發(竞態、死鎖、可見性)、邊界條件(空指針、越界、除零)、配置錯誤(屬性、環境變量)、依賴衝突(JAR 版本)、外部依賴超時/熔斷、數據髒讀(緩存未失效)。
- 修復驗證與預防
單測覆蓋該分支、回歸測試、加入 Assert/契約測試、更新文檔/運行手冊。
日常習慣
- 讀源碼 > 盲目 Debug:斷點調試易陷入細節,閱讀相關類源碼常能一眼看到邏輯分支。
- 善用 Git Bisect:自動二分定位引入 Bug 的提交。
- 建立個人「踩坑筆記」,同類問題秒級解決。
系統化排查思路,讓 Bug 無處遁形,從「碰運氣」進化為「確定性工程」。