2016-09-28 125 views
0

我正在使用一個開放源碼項目工作的內部應用程序。 它是楔形的linux ocr引擎。 當我在調試模式下構建它時,構建完美。 發佈版本掛在一些圖像上,沒有任何反饋。visual C++強制發佈版本使用調試版本代碼

是否可以更改編譯器標誌,即發佈版本使用調試版本代碼? 我試圖在代碼中編輯ifdef和ifndef配置,但沒有成功。

我是一個c#開發人員,只有C++的基本技能。

我想使用發佈版本的主要原因是安裝它的服務器應該只使用msvC++運行時。調試DLL只能通過Visual Studio安裝程序提供。

認爲 英戈

+0

只需徹底檢查您的代碼,編譯可能啓用調試版本的發行版本時可能還有一些內容。 – Stubborn

回答

1

這是不妥當的。在這種情況下(調試運行良好,Release不運行),它傾向於在某處落入未初始化的變量。它最好的做法是在整個代碼中放置斷言,作爲開發人員的健全性檢查(斷言通常不會作爲Release版本的一部分進行編譯,但是它們是Debug版本的一部分),以檢查這種情況。

調試版本將包含大量額外的符號信息以及更嚴格的代碼中的值分配,以確保調試器可以掛接到它。這有時候可以緩解這樣的問題,因爲編譯器會正確初始化調試器的變量,如果未正確初始化的變量會產生未定義的行爲(有時候這種未定義的行爲對於程序執行來說是非常致命的!)。因此,當一個Debug版本執行時,Release版本不起作用。

+1

此外,Visual Studio的許可條款僅允許您自由重新分配庫的「發行版」 - 您可以使用調試庫,但僅用於調試應用程序。 – TripeHound

+0

@TripeHound這是我不想使用調試版本的事實! – user1688566

+0

@Ifgtm感謝您的提示!我知道有一些警告沒有初始化變量......我會檢查它 – user1688566