建立發行組建時的常見問題
在開發期間,您通常會以專案的偵錯版進行建置及測試。 之後如果為您的應用程式建置發行的組建 (Release Build),可能會發生存取違規。
下列清單顯示偵錯版與發行的組建 (非偵錯) 之間的主要差異。 當然還有其他差異,但以下是會導致應用程式在偵錯版中可正常執行,而在發行的組建中會失敗的主要差異。
堆積配置
編譯
指標支援
最佳化
如需有關如何在偵錯版中找出發行組建錯誤的詳細資訊,請參閱 /GZ (在偵錯版中找出發行組建的錯誤) 編譯器選項。
堆積配置
當應用程式可在偵錯版中正常執行,而在發行的組建中卻不行時,大約有百分之九十的明顯問題是出自堆積 (Heap) 配置。
當您建置專案進行偵錯時,您是使用偵錯記憶體配置器 (Debug Memory Allocator)。 這表示所有的記憶體配置周圍都放置了保護位元組。 這些保護位元組會偵測記憶體覆寫。 由於發行的組建與偵錯版的堆積配置不同,在偵錯版中的記憶體覆寫可能不會造成任何問題,但在發行的組建中卻可能產生災難性的影響。
如需詳細資訊,請參閱檢查記憶體覆寫和使用偵錯版檢查記憶體覆寫。
編譯
當您建置發行的組建時,很多 MFC 巨集和眾多 MFC 實作都會變更。 尤其是 ASSERT 巨集在發行的組建中評估成不動作,因此將不會執行 ASSERT 中的任何程式碼。 如需詳細資訊,請參閱檢查 ASSERT 陳述式。
已內嵌 (Inline) 一些函式,以便在發行的組建中加快速度。 在發行的組建中通常會開啟最佳化。 並使用不同的記憶體配置器。
指標支援
缺少偵錯資訊時,會從您的應用程式中移除填補。 在發行的組建中,偏離的指標比較可能指向未初始化的記憶體,而非指向偵錯資訊。
最佳化
根據程式碼的特定區段的本質,最佳化編譯器可能產生未預期的程式碼。 這是最不可能導致發行組建問題的原因,但它的確偶而會發生。 如需解決方案,請參閱最佳化程式碼。