2012-03-25 86 views
5

我在C#4.0(VS2010)中的應用程序上工作,我有一個非常奇怪的情況。我向所有團隊報告了一個錯誤,並且我一直無法重現它,直到其他開發人員告訴我雙擊可執行文件並按照錯誤情況而不是從VS2010啓動它。Visual Studio啓動可執行文件並自行啓動它的區別?

經過一番研究,我發現,大多數在這個問題上的意見是關於未初始化的堆內存之類的,但在C++環境。我知道如果一個變量沒有初始化,C#會產生一個錯誤,而不是一個警告,所以這不是問題,很可能。

兩個版本是我的機器和用戶對相同的,我現在知道了,按F5 (開始調試)不會產生問題,而Ctrl + F5鍵一樣。所以問題不在於兩者之間的差異(其他問題已經解決了這個問題),而是:如何將調試器附加到進程影響其行爲?!

該代碼通過網絡創建連接。

回答

7

所以問題是:如何將調試器附加到C#過程影響其行爲?!

在各種方式。它會影響JIT優化,垃圾收集,計時(思考競爭條件),明確嘗試檢測它是否在調試器中運行的任何內容,以及潛在的類型初始化的順序和時間。

如果你現在可以複製它,我就開始添加日誌,看看,帶你 - 一旦你制定出了什麼問題實際上是,你可能會發現這是顯而易見的,爲什麼調試程序改變的東西。

+0

注意,與在調試器中運行,在我看來,這個錯誤的最可能的原因上面提到的問題是競爭條件假設代碼是沒有明確檢測,它是在一個調試器中運行。 JIT優化和垃圾收集問題更可能在調試版本中顯示爲錯誤,而不是在發佈版本中顯示。 – dotancohen 2012-03-25 08:51:19

+0

[@JonSkeet,@dotancohen]我試圖通過生成有問題的方法的消息框來解決這個問題。在我的第一個試用版中,我從第一行代碼中生成了一個消息框。問題再也沒有出現!這可能是什麼原因?一個消息框怎麼能有這樣的區別? – OmarOthman 2012-03-28 08:40:08

+0

@OmarOthman:*非常*容易 - 消息框非常*非常有創意,從根本上影響時間等方面。我建議使用侵入性較小的日誌記錄......理想情況下,只需定期觸摸文件系統,以減少對時間等 – 2012-03-28 08:45:47