建立發行組建時的常見問題

更新:2007 年 11 月

在開發期間,您通常會以專案的偵錯版進行建置及測試。之後如果為您的應用程式建置發行的組建 (Release Build),可能會發生存取違規。

下列清單顯示偵錯版與發行的組建 (非偵錯) 之間的主要差異。當然還有其他差異,但以下是會導致應用程式在偵錯版中可正常執行,而在發行的組建中會失敗的主要差異。

  • 堆積配置

  • 編譯

  • 指標支援

  • 最佳化

如需有關如何在偵錯版中找出發行組建錯誤的詳細資訊,請參閱 /GZ (在偵錯版中找出發行組建的錯誤) 編譯器選項。

堆積配置

當應用程式可在偵錯版中正常執行,而在發行的組建中卻不行時,大約有百分之九十的明顯問題是出自堆積 (Heap) 配置。

當您建置專案進行偵錯時,您是使用偵錯記憶體配置器 (Debug Memory Allocator)。這表示所有的記憶體配置周圍都放置了保護位元組。這些保護位元組會偵測記憶體覆寫。由於發行的組建與偵錯版的堆積配置不同,在偵錯版中的記憶體覆寫可能不會造成任何問題,但在發行的組建中卻可能產生災難性的影響。

如需詳細資訊,請參閱檢查記憶體覆寫使用偵錯版檢查記憶體覆寫

編譯

當您建置發行的組建時,很多 MFC 巨集和眾多 MFC 實作都會變更。尤其是 ASSERT 巨集在發行的組建中評估成不動作,因此將不會執行 ASSERT 中的任何程式碼。如需詳細資訊,請參閱檢查 ASSERT 陳述式

已內嵌 (Inline) 一些函式,以便在發行的組建中加快速度。在發行的組建中通常會開啟最佳化。並使用不同的記憶體配置器。

指標支援

缺少偵錯資訊時,會從您的應用程式中移除填補。在發行的組建中,偏離的指標比較可能指向未初始化的記憶體,而非指向偵錯資訊。

最佳化

根據程式碼的特定區段的本質,最佳化編譯器可能產生未預期的程式碼。這是最不可能導致發行組建問題的原因,但它的確偶而會發生。如需解決方案,請參閱最佳化程式碼

請參閱

參考

發行的組建

解決發行組建的問題