建立發行組建時的常見問題
在開發期間,您通常會使用專案的偵錯組建來建置和測試。 如果您接著為發行組建建置應用程式,您可能會收到存取違規。
下列清單顯示偵錯與發行 (nondebug) 組建之間的主要差異。 還有其他差異,但以下是在偵錯組建中運作時,會導致應用程式在發行組建中失敗的主要差異。
如需如何在偵錯組建中攔截發行組建錯誤的資訊,請參閱 /GZ (在偵錯組建中攔截發行組建錯誤)編譯程序選項。
堆積配置
堆積配置是當應用程式在偵錯中運作但無法釋出時,大約90%明顯問題的原因。
當您建置專案以進行偵錯時,您會使用偵錯記憶體配置器。 這表示所有記憶體配置都有放在它們周圍的防護位元組。 這些防護位元組會偵測記憶體覆寫。 因為發行和偵錯版本之間的堆積配置不同,因此記憶體覆寫可能不會在偵錯組建中建立任何問題,但在發行組建中可能會產生重大影響。
如需詳細資訊,請參閱 檢查記憶體覆寫 和使用 偵錯組建檢查記憶體覆寫。
編譯
當您建置發行時,許多 MFC 巨集和大部分的 MFC 實作都會變更。 特別是 ASSERT 巨集會在發行組建中評估為無任何專案,因此不會執行 ASSERT 中找到的程式代碼。 如需詳細資訊,請參閱 檢查 ASSERT 語句。
某些函式會內嵌在發行組建中以提升速度。 優化通常會在發行組建中開啟。 也會使用不同的記憶體配置器。
指標支援
缺少偵錯資訊會從您的應用程式中移除填補。 在發行組建中,流浪指標有機會指向未初始化的記憶體,而不是指向偵錯資訊。
最佳化
根據特定程式代碼區段的性質,優化編譯程式可能會產生非預期的程序代碼。 這是發行組建問題最不可能的原因,但有時確實發生。 如需解決方案,請參閱 優化您的程序代碼。