除錯前置準備:專案選項關鍵設定
正確的編譯器/連結器設定是除錯順利的前提。依序檢查 Project → Options:
Compiler 標籤
- 點選 Full Debug 按鈕:自動啟用調試資訊、關閉優化、啟用行號資訊。
- Code optimization = None:防止編譯器重排/內聯導致原始碼與機器碼對應失真。
- Debug information = On、Line number information = On。
- Disable inline expansions = On:避免內聯函式讓單步進入失效。
Pascal 標籤(含 VCL 專案必看)
- Optimization = Off。
- Debugging 區塊全勾選(行號、參數資訊等)。
Linker 標籤
- Create debug information = On:產生 TD32/Map 檔,支援源級除錯。
- Use dynamic RTL:視專案需求(動態連結較小、靜態連結獨立)。
- Don't generate state files = Off:啟用狀態檔加速增量連結(會產生大型 .~df 檔)。
Directories/Conditionals 標籤
- Search path 加入
$(BCB)\source\vcl 及第三方元件原始碼路徑,才能單步進入 VCL/元件內部。
Packages 標籤 —— 最關鍵
- Build with runtime packages = Off(靜態連結)。
原因:Runtime Package (BPL) 本身不含除錯資訊,啟用時除錯器會將錯誤歸咎於 VCL 內部,掩蓋真實應用層 Bug。除錯階段務必關閉,發布時再決定是否開啟。
Debugger Options 對話框
- Tools → Debugger Options → Integrated debugging = On:啟用 IDE 內建除錯器。
設定完成後執行 Project → Build All 重新完整編譯,確保所有單元套用新設定。
斷點大師:從基礎到條件斷點
基本操作
- 編輯器左側灰色邊欄點擊 → 紅點 = 斷點。
- 藍點 = 可設斷點行(含可執行碼);紅叉 = 無效斷點(無碼行、註解、優化掉);綠勾 = 有效啟用。
- 執行中可隨時新增/移除/啟用/停用,無需重新編譯。
條件斷點
右鍵斷點 → Breakpoint Properties:
- Condition:C++ 布林運算式(如
i == 100 && obj->state == 3),變數必須在該作用域可見。執行至斷點時評估,真才停下。
- Pass Count:略過前 N-1 次,第 N 次停下(如迴圈第 500 次)。
- 兩者可組合:
Pass Count = 10, Condition = x > 0 表示前 9 次忽略,第 10 次滿足條件才停。
異常即斷點
異常拋出時,除錯器自動在拋出行顯示為特殊斷點(紅底白字),可直接檢查堆疊與變數。
變數監視三大工具
| 工具 | 開啟方式 | 特色 | 適用場景 |
| Watch List | View → Debug Windows → Watch List / Ctrl+Alt+W | 手動輸入運算式,跨作用域、支援型別轉換、陣列切片 | 追蹤特定變數/運算式跨函式變化 |
| Inspector | 滑鼠停留變數 → 右鍵 Inspect / Ctrl+I | 樹狀展開物件/結構/陣列/指標,可遞迴展開 | 深度檢查複雜物件結構 |
| Evaluate/Modify | 編輯器右鍵 Evaluate/Modify / Ctrl+F7 | 即時求值、修改變數、呼叫函式 | 臨時驗證假設、側邊效應測試 |
Local Variables 視窗
View → Debug Windows → Local Variables 自動顯示當前幀所有區域變數(含 this、參數),單步時即時更新,無需手動加入。
下一篇預告
將深入單步執行技巧(F7/F8/Shift+F7/F4/Shift+F8 差異)、CPU 視窗反組譯除錯、Call Stack 呼叫鏈分析、除錯版面配置與實戰心法。