共用方式為


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

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

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

  • 堆積配置

  • 編譯

  • 指標支援

  • 最佳化

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

堆積配置

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

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

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

編譯

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

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

指標支援

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

最佳化

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

請參閱

參考

發行的組建

解決發行組建的問題