2010-07-01 30 views
0

我擊中了我認爲是競爭條件的東西。我有什麼選擇來調試它?用於在Silverlight中調試競態條件的技術

更多詳細信息: 我有一個使用Telerik網格的Silverlight應用程序。用戶可以通過使用連接到網格的列選擇器來自定義列。在通過代碼創建可能列的列表的特定情況下,當我打開列選擇器並將其關閉時,網格中的數據(所有行)消失!

我看到的症狀導致我相信這是一種競爭條件: - 如果我在columnchooser.close行放置了一個斷點,並且擊中了斷點,只需繼續,則錯誤不可見(所有網格行都保持可見) - 如果我將一個Thread.Sleep(1000)放在columnchooser.close之前的代碼中,那麼該bug再次消失 - 如果在調試時將Visual Studio中的「線程」窗口保持打開狀態,我看到一個線程暫時出現,並在線程窗口中消失,就像我打的斷點columnchooser.close

所以,我嘗試了以下找出哪些線程在那個時間點上運行 - 但沒有喜悅:

  1. System.Diagnostics.Process在Silverlight中不可用,所以我無法執行System.Diagnostics.Process.Threads以獲取以編程方式運行的線程列表。
  2. 我嘗試了一個「點擊時」運行Macros.Samples.VSDebugger.DumpStacks的斷點,但我無法弄清楚它將所有堆棧跟蹤轉存到哪裏。

任何幫助或想法,我可以做什麼來調試這個問題?

回答

0

如果沒有代碼,這一定是模糊的,但是你是否已經考慮將lock放在列上,甚至是網格本身。

我不確定這將如何實際工作,但如果(如您所暗示的)問題是由於列選擇器和列創建代碼試圖同時訪問網格,那麼這可能會解決它。