我處理目前一個非常奇特的問題:我有一個應用程序,在調試-Buildmode充分的工作,無論是我從MSVC環境中運行或啓動生成的可執行自己。如果我在Release-Buildmode中構建這個應用程序,當我從MSVC環境運行它時它已經完全工作,但是當我自己啓動它時會顯示意外的行爲。差異和發佈環境
調試和發佈模式之間的區別可能是此行爲的原因,以及爲什麼只有在手動啓動可執行文件時纔會出現這些問題?
很難給代碼,因爲這是一個相當大的項目,我絕對沒有什麼線索,可能會造成問題。該程序流程基本上是:從文件
- 讀取設置(不是問題,雙重檢查讀取值,並使用ini-和libconfig ++ - 庫可以肯定的)
- 分配值,以單獨的類(雙重檢查傳遞的值)
- 其中一個類啓動一個線程(
boost::thread
),並觸發某些事件的回調函數(如果是手動執行的發佈版本這些不觸發)
的東西,我能想象的威力造成問題,但我不知道的:
- 由於各個班級由不同的人寫的,還有的
std::string
和std::wstring
用法不一致。我使用std::wstring(s.begin(), s.end())
從一個轉換到另一個,反之亦然。
這可能是我的問題的原因,如果是的話,我該如何解決這個問題?我非常感謝這方面的幫助。提前致謝。
更新:
- 程序不崩潰和變量似乎並沒有當我使用臭名昭著的打印調試方法(因爲在調試器中一切順利罰款)有不同的值
- 我已閱讀,未初始化變量可能會造成這個問題,並通過triplechecked我使用的每個變量,每個變量正確初始化
- 在單元測試中,我使用的作品如預期(雖然我不知道我得到了每個模塊因爲我有,每次都有正確的邊界案例e不是自己寫的所有模塊)。
更新2:
- 同時禁用一步優化步驟和使釋放buildmode接近調試buildmode我能夠縮小問題下:**在代碼生成選項卡,我的程序與
Multithreaded-Debug-DLL
,而不是Multithreaded-DLL
,無論優化設置。
這似乎是一個很好的成就,但我缺乏對這個問題的理解。
究竟是什麼問題?程序崩潰了嗎?你有沒有嘗試找到觸發這些事件的代碼?你是否修復了完全字符串不一致? – 2012-02-23 11:28:49
通常這是一個未經初始化的變量,取決於程序的啓動方式,它會得到不同的隨機值。 – 2012-02-23 11:29:16
@Bojan Komazec你是什麼意思與「固定完全字符串不一致」?如上所述,我必須將std :: string轉換爲std :: wstring幾次。 – nijansen 2012-02-23 11:57:28