在這裏抓我的腦海:我有一個應用程序,在調試和「無需調試運行」的情況下,如果從Visual Studio 2010啓動,在Debug + Release中工作正常。如果我使用相同的設置從命令行運行相同的應用程序,我會看到不同的行爲。特別是,運行不同的代碼是:從命令行運行到「無需調試運行」的不同行爲
const List& vl = nDesc.Get<List> ("slots");
int index = 0;
for (auto it = vl.begin(), end = vl.end(); it != end; ++it)
{
desc.units [index++] = Parse (Tree (*it));
// If I access it again here, e.g.
// Log::Info (std::distance (vl.begin(), it))
// this works always
}
我會假設這是一個競爭條件,但代碼完全是單線程的。有趣的是,添加一些隨機代碼並不能使其工作(即只記錄一個字符串是不夠的)。哦,這個循環只運行一次。
desc中的數據是相同的,在循環顯示相同的數據被寫入後,將其轉儲到文件。在這段代碼中上下移動循環並沒有幫助;也不會將自動更改爲List :: const_iterator幫助。
任何想法開始調試呢?
[更新]關閉此功能的優化功能並不能解決發佈問題,但我可以附加調試程序並查看其中的所有內容都按預期工作。但我沒有得到正確的程序行爲。 Stills可以在「無需調試運行」和「與調試一起運行」的情況下使用。
如果你開始它沒有調試,並且稍後附加調試器會出現錯誤嗎? – 2011-03-18 13:42:45
是的,似乎是這樣。有趣的,讓我們看看是否有幫助。 – Anteru 2011-03-18 13:45:23
這不一定與這段代碼有任何關係 - 它可能會覆蓋此代碼使用的內存。 cmd vs VS最大的區別是環境,路徑和命令行參數 - 檢查這些 – 2011-03-18 13:45:51