我的應用程序處於死鎖狀態。有沒有什麼方法可以識別目前鎖定的物體(如下所示)?查找鎖定對象
void DoWork()
{
lock(this._lockObj)
{
// Do some work
}
}
我的應用程序處於死鎖狀態。有沒有什麼方法可以識別目前鎖定的物體(如下所示)?查找鎖定對象
void DoWork()
{
lock(this._lockObj)
{
// Do some work
}
}
做到這一點,最好的辦法是使用WinDbg和SOS擴展。它有一個名爲!SyncBlk
的命令,它提供了這些信息。下面是一個快速教程
感謝您的信息。真棒工具! – 2011-04-29 00:00:54
鏈接如果你的Visual Studio調試下,這不是太硬。特別需要兩個調試窗口:調用堆棧和線程。暫停程序,然後在線程窗口中雙擊每個線程,找到當前停止的位置。死鎖線程應該在「鎖定」語句中停止它們的執行。
然後,在每個死鎖線程上,您可以追蹤堆棧以找到其他鎖。只需雙擊通話中的每個方法,然後查看上下文,直到找到另一個內部鎖。
如果有幫助,可以使用'Monitor.TryEnter'來評估一個特定的對象是否被鎖定。 – mquander 2010-08-20 15:15:30
dupe? http://stackoverflow.com/questions/1300199/c-anyway-to-detect-if-an-object-is-locked – 2010-08-20 15:16:45
可能的重複[確定持有鎖的線程](http://stackoverflow.com/questions/3523544/identify-the-thread-which-holds-the-lock) – 2010-08-20 15:17:32