Debug 能跑、Release 報錯(通常是連結錯誤 LNK2001/2019 或運行時崩潰),核心原因:**Debug/Release 兩套配置不一致**。
必查項目屬性差異
| 屬性頁 | 關鍵設定 | Debug 常見值 | Release 應同步值 |
| C/C++ → 一般 | 附加包含目錄 | $(SolutionDir)include;... | **完全一致** |
| C/C++ → 代碼生成 | 運行庫 | /MDd (Debug DLL) | /MD (Release DLL) **不可混用** |
| 連結器 → 一般 | 附加庫目錄 | $(SolutionDir)lib\Debug | $(SolutionDir)lib\Release |
| 連結器 → 輸入 | 附加相依性 | libcpmtd.lib;xxxd.lib | libcpmt.lib;xxx.lib **去掉 d 後綴** |
| C/C++ → 預處理器 | 預處理器定義 | _DEBUG;DEBUG | NDEBUG |
常見陷阱
- 靜態庫 .lib 分 Debug/Release 版:Release 必須連 Release 版 .lib(無 `d` 後綴),否則符號不匹配報 LNK2001。
- 運行庫不匹配:主程式 `/MD`、第三方庫 `/MT` → 堆疊損壞、雙重 free、崩潰。**全專案統一 `/MD`(動態 CRT)最省事**。
- 預編譯頭 .pch 不共用:Debug/Release 各自產生,清理解決方案後重建。
- 原始碼檔未加入 Release 建置:方案總管 → 檔案屬性 → 「從建置排除」確保為「否」。
快速修復流程
- 方案總管右鍵專案 → **屬性** → 左上「配置」選 **All Configurations** → 統一設定包含目錄、庫目錄、運行庫 `/MD`。
- 再分別切 Debug/Release 微調:運行庫 `/MDd` vs `/MD`、輸出目錄、優化等級。
- **清除方案** → 刪除 `x64/Debug` `x64/Release` `ipch` 等中間資料夾 → **重建**。
- 若仍報錯,貼出具體錯誤碼(LNKxxxx / Cxxxx)與行號,精準定位。
核心原則:**Debug/Release 除優化等級、運行庫版本外,其他路徑、宏、相依庫必須邏輯一致**。