2010-08-20 83 views
1

我的應用程序處於死鎖狀態。有沒有什麼方法可以識別目前鎖定的物體(如下所示)?查找鎖定對象


void DoWork() 
{ 
    lock(this._lockObj) 
    { 
     // Do some work 
    } 
} 
+0

如果有幫助,可以使用'Monitor.TryEnter'來評估一個特定的對象是否被鎖定。 – mquander 2010-08-20 15:15:30

+0

dupe? http://stackoverflow.com/questions/1300199/c-anyway-to-detect-if-an-object-is-locked – 2010-08-20 15:16:45

+0

可能的重複[確定持有鎖的線程](http://stackoverflow.com/questions/3523544/identify-the-thread-which-holds-the-lock) – 2010-08-20 15:17:32

回答

4

鏈接如果你的Visual Studio調試下,這不是太硬。特別需要兩個調試窗口:調用堆棧和線程。暫停程序,然後在線程窗口中雙擊每個線程,找到當前停止的位置。死鎖線程應該在「鎖定」語句中停止它們的執行。

然後,在每個死鎖線程上,您可以追蹤堆棧以找到其他鎖。只需雙擊通話中的每個方法,然後查看上下文,直到找到另一個內部鎖。