找到锁定的对象

时间:2010-08-20 15:11:26

标签: c#

我的应用程序陷入僵局。有没有办法识别目前锁定的对象(如下所示)?


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

2 个答案:

答案 0 :(得分:6)

执行此操作的最佳方法是使用WinDbg和SOS扩展。它有一个名为!SyncBlk的命令,它只提供此信息。这是一个快速教程的链接

答案 1 :(得分:4)

如果您在Visual Studio下进行调试,那就不难了。特别需要两个调试窗口:调用堆栈和线程。暂停程序,然后在线程窗口中双击每个线程,找到它当前停止的位置。死锁线程应该在“锁定”语句中停止执行。

然后,在每个死锁线程上,您可以跟踪堆栈中的路径以找到另一个锁定。只需双击调用中的每个方法并查看上下文,直到找到您所在的另一个锁。