【发布时间】:2018-10-10 13:00:25
【问题描述】:
我正在尝试使用 SOSEX 命令 !dlk 来调试我的进程中的死锁 我得到以下输出:
*DEADLOCK DETECTED*
CLR thread 0xac holds the lock on SyncBlock 00000012ac132068 OBJ:00000012830d66a0[System.Object]
and is waiting for the lock on SyncBlock 00000012ae4ba6b8 OBJ:00000012808391f8[System.Collections.Generic.Dictionary`2[[System.Guid, mscorlib],[CaptureServices.GenericInfrastructure.Controlling.CapManager.MO.CallRecorder.ICallRecorder, Capture Manager]]]
CLR thread 0x9a holds the lock on SyncBlock 00000012ae4ba6b8 OBJ:00000012808391f8[System.Collections.Generic.Dictionary`2[[System.Guid, mscorlib],[CaptureServices.GenericInfrastructure.Controlling.CapManager.MO.CallRecorder.ICallRecorder, Capture Manager]]]
and is waiting for the lock on SyncBlock 00000012ac132068 OBJ:00000012830d66a0[System.Object]
我希望能够获取这些线程的调用堆栈,但我无法在线程列表中找到线程 ID(0xac、0x9a)。 我尝试了以下命令,以上线程均未在任何结果中列出:
- ~ - 应该显示所有线程(托管和非托管)
- ~*e!clrstack - 应该显示所有线程的调用堆栈
- ~*e!dumpstack - 转储所有托管线程
还有其他方法可以查看在我可能丢失的死锁中找到的线程的调用堆栈吗?我什至尝试将线程 ID 转换为十进制,但找不到匹配的线程 ID。
谢谢
【问题讨论】:
-
!threads显示托管线程。也许你在那里找到它。但是,9A 是 154,这是一个很大的数字 -
谢谢 - 我找到了以下文章,解释了结果中显示的线程 ID 是十进制形式的 CLR ID:blogs.msdn.microsoft.com/tess/2010/04/27/…
-
好的,好的。然后,请将您的发现作为答案发布。然后,您可以接受自己的答案并将此案例标记为已解决。
标签: c# multithreading debugging deadlock windbg