2011-12-06 56 views
2

Studio調試器的UI行爲我有一個鎖的代碼塊:C#視覺與鎖

lock (obj) 
{ 
    //... 
} 

我也有同樣的對象鎖定的屬性。足夠簡單的場景。我的問題是,如果我在鎖定的代碼塊中放置斷點,然後檢查Visual Studio調試器中的屬性,會發生什麼情況?調試器會死鎖,直到斷點後繼續執行(或者終止Visual Studio /調試)?或者將調試器根本不會顯示該財產的任何數據

我之所以問的是我爲了調試的目的有某種屬性(只)(從UI抓在後臺線程數據?);我與它確定偶爾不顯示數據時,這種情況發生,但已經墜毀的調試器(和Visual Studio)許多不好的調試屬性的時候,我寧願避免代碼可能會在某些時候妨礙我調試的努力時,這我試圖幫助開始!

我打算在某個時候測試這個時候我有一些時間,但希望從別人誰可能知道更好更快的答案。

+4

我發誓,你可以在你花在編寫問題的一小部分時間已經測試了這一點。 –

+2

我不會擔心崩潰調試器 - 這是Visual Studio團隊擔心的問題。我會更擔心我的多線程同步點是有效的。你應該花時間寫多線程單元測試。 – SliverNinja

+0

@Charles我承認,在輸入問題後,問題變得比我原先想的要簡單得多,但是在那個時候,建立一個測試比開發後期工作和希望得到快速回答更重要: P – StarKat99

回答

3

是,調試器執行看是這樣的過程中運行在一個單獨的工作線程的表達。這將會在你的財產獲得者和區塊中擊中。調試器持續5秒鐘,然後聲明監視表達式不可用,並顯示「功能評估超時」。

然後調試器會變得脾氣暴躁,對於被阻塞的線程可以做的事情不多,您通常會看到「因爲之前的函數評估超時,函數評估被禁用,您必須繼續執行才能重新啓用函數評估。這是很好的建議。

+0

謝謝,這聽起來是我所希望的。 – StarKat99

2

沒有調試器會告訴你對象的屬性,即使它是一個lock()塊內。

鎖定對象實際上並不妨礙對對象的任何訪問 - 它只是創建一個信號量,該信號將阻止任何試圖鎖定相同對象直到釋放鎖定的代碼。

+0

我想OP所說的是,屬性的​​get {}方法也會鎖定該對象,問題是如果設計器使用屬性getter來顯示屬性值,它會在嘗試獲取時阻止價值。 –

1

我的經驗是,VS.NET調試器不時凍結,但它必須有一些死鎖檢測和調試優化,以避免這些類型的問題。