2011-05-28 82 views
3

我已經告訴VC++在發佈模式下編譯我的程序,但assert()語句仍然會觸發。我認爲斷言應該是從發佈版本中編譯出來的。這是怎麼回事?有沒有其他設置我需要設置跳過編譯它們?斷言沒有編譯出發布版本

+0

你嘗試 「重建所有」? – 2011-05-28 16:44:26

+0

調試和發佈之間的斷言消息有任何區別嗎? – 2011-05-28 16:56:28

+0

單個或多個模塊輸出? – 2011-05-28 16:56:55

回答

2

檢查您正在定義的預處理器符號。調試版本通常會定義_DEBUG,發佈版本通常會定義NDEBUG。當定義NDEBUG時,斷言通常會被關閉。

+0

NDEBUG設置和_DEBUG不是 – jeffythedragonslayer 2011-05-28 16:51:44

+0

好吧,這很有趣:在主項目中,具有WinMain(),NDEBUG定義和_DEBUG不是。但是對於所有其他項目,即使它們設置爲發佈模式,情況正好相反。 – jeffythedragonslayer 2011-05-28 17:03:34

+0

好的。所以我現在已經把所有的文件合併到一個項目中,並且它似乎解決了這個問題。仍然不知道爲什麼每個項目的調試符號都不同。 – jeffythedragonslayer 2011-05-29 04:53:26

0

在調試器下打開應用程序。斷言對話框啓動時,執行debug-> break。查看assert正在觸發的源文件。現在看看該文件的構建設置。如果設置看起來正確並且您正在加載發行版本,請在編譯器命令行上設置/ P和/ d1PP以顯示錯誤的#define來自何處。

馬丁

相關問題