我擊中了我認爲是競爭條件的東西。我有什麼選擇來調試它?用於在Silverlight中調試競態條件的技術
更多詳細信息: 我有一個使用Telerik網格的Silverlight應用程序。用戶可以通過使用連接到網格的列選擇器來自定義列。在通過代碼創建可能列的列表的特定情況下,當我打開列選擇器並將其關閉時,網格中的數據(所有行)消失!
我看到的症狀導致我相信這是一種競爭條件: - 如果我在columnchooser.close行放置了一個斷點,並且擊中了斷點,只需繼續,則錯誤不可見(所有網格行都保持可見) - 如果我將一個Thread.Sleep(1000)放在columnchooser.close之前的代碼中,那麼該bug再次消失 - 如果在調試時將Visual Studio中的「線程」窗口保持打開狀態,我看到一個線程暫時出現,並在線程窗口中消失,就像我打的斷點columnchooser.close
所以,我嘗試了以下找出哪些線程在那個時間點上運行 - 但沒有喜悅:
- System.Diagnostics.Process在Silverlight中不可用,所以我無法執行System.Diagnostics.Process.Threads以獲取以編程方式運行的線程列表。
- 我嘗試了一個「點擊時」運行Macros.Samples.VSDebugger.DumpStacks的斷點,但我無法弄清楚它將所有堆棧跟蹤轉存到哪裏。
任何幫助或想法,我可以做什麼來調試這個問題?