| 特性 | Debug Build | Release Build |
| 調試資訊 | 完整 (行號、變數、符號表) | 無 (或僅行號) |
| MFC 庫 | MFC Debug DLL (MFC42D.DLL) | MFC Release DLL (MFC42.DLL) |
| CRT 庫 | Debug CRT (MSVCRTD.DLL) | Release CRT (MSVCRT.DLL) |
| 優化 | 關閉 (/Od) | 全速優化 (/O2) |
| 診斷宏 | 啟用 (TRACE, ASSERT, VERIFY) | 自動移除 (宏展開為空) |
| 輸出目錄 | Debug/ | Release/ |
**鐵律**:開發階段 **只用 Debug**;發布給用戶 **只用 Release**。
診斷宏:調試期的「X 光眼」
// 常用宏
TRACE("Entering OnLButtonDown: x=%d, y=%d\n", point.x, point.y); // 輸出到 Debug 輸出視窗
ASSERT(pDoc != NULL); // 僅 Debug 生效,條件為假則中斷並顯示對話框
VERIFY(::SetMenu(hWnd, hMenu)); // Release 也執行表達式,但不檢查返回值
ASSERT_VALID(pObj); // 檢查 CObject 派生類有效性 (虛函數表指針、內部狀態)
Release 版自動過濾所有診斷宏,**零性能損耗**,放心在核心邏輯中大量使用。
調試工具箱
- 斷點 (F9):條件斷點、命中計數、檢查點表達式。
- 單步執行:F10 (Step Over)、F11 (Step Into)、Shift+F11 (Step Out)。
- 監視視窗:變數值、表達式、記憶體、寄存器、反組譯。
- Spy++ (spyxx.exe):視窗消息監控、視窗層次樹、進程/線程檢視 —— **消息調試神器**。
- Dependency Walker (depends.exe):DLL 依賴分析、缺失模塊、導入/導出函數表。
- MSDN (F1):**最權威、最全、最準** 的參考。養成「不懂即查 MSDN」習慣。
編譯錯誤實戰心法
- 從網上/書本複製代碼貼入 → 編譯 → **幾十上百個錯誤/警告** 是常態。
- **耐心 + 經驗 + 工具** 逐個擊破:
- 雙擊錯誤列表跳轉源碼行。
- 看錯誤代碼 (Cxxxx) 按 F1 查 MSDN 說明。
- 檢查頭文件包含順序、宏定義、命名空間、模板語法。
- 善用「輸出視窗」完整編譯日誌,而非只看「錯誤列表」摘要。
- 常見書本代碼錯誤:API 參數順序錯、宏名稱變更、缺少頭文件、Unicode/ANSI 不匹配。
雷神建議:建立個人「調試知識庫」
- 每解決一個疑難雜症,記錄:現象、原因、定位步驟、解決代碼/設置、參考鏈接。
- 分類標籤:
Linker, HeapCorruption, Deadlock, DPI, Unicode...。
- 久而久之形成肌肉記憶,遇到同類問題秒級定位。
下一篇預告
Day 5:基本事件處理—— WM_CREATE, WM_CLOSE, WM_QUERYENDSESSION, WM_DESTROY, WM_NCDESTROY 生命周期消息深度解析,惡作劇程式:右鍵關機。
- 上一篇文章: 《VC++技術內幕》學習筆記(三):消息映射機制、視圖類 CView、OnDraw 繪圖、映射模式初探
- 下一篇文章: 《VC++技術內幕》學習筆記(五):視窗生命周期五大關鍵消息深度解析 (WM_CREATE 到 WM_NCDESTROY)
Copyright ©
程式碼之家 All Rights Reserved