2010-08-20 50 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调试下,这不是太硬。特别需要两个调试窗口:调用堆栈和线程。暂停程序,然后在线程窗口中双击每个线程,找到当前停止的位置。死锁线程应该在“锁定”语句中停止它们的执行。

然后,在每个死锁线程上,您可以追踪堆栈以找到其他锁。只需双击通话中的每个方法,然后查看上下文,直到找到另一个内部锁。