应用程序挂起:解释WinDbg命令的输出

时间:2018-10-24 15:18:08

标签: c# multithreading debugging windbg sos

我的.NET应用程序使用BlockingCollection处理从RabbitMQ接收的数据。有时在生产中它停止处理消息。我使用procdump util进行了转储,并尝试使用WinDbg检查转储。 !threads命令为我显示了一个带有LockCount=1的线程。 ~*e!clrstack命令为另一个线程提供了此输出:

Child SP       IP Call Site
0f3bf068 7760c8ac [GCFrame: 0f3bf068] 
0f3bf118 7760c8ac [HelperMethodFrame_1OBJ: 0f3bf118] System.Threading.Monitor.ObjWait(Boolean, Int32, System.Object)
0f3bf1a4 70ac5fb7 System.Threading.Monitor.Wait(System.Object, Int32, Boolean)
0f3bf1b4 70ad76a7 System.Threading.SemaphoreSlim.WaitUntilCountOrTimeout(Int32, UInt32, System.Threading.CancellationToken)
0f3bf1d0 70ad75f0 System.Threading.SemaphoreSlim.Wait(Int32, System.Threading.CancellationToken)
0f3bf230 703dc110 System.Collections.Concurrent.BlockingCollection`1[[System.__Canon, mscorlib]].TryAddWithNoTimeValidation(System.__Canon, Int32, System.Threading.CancellationToken)

我试图找到有关锁的更多信息。 !locks命令只给了我Scanned 40 critical sections!SyncBlock显示如下:

Index         SyncBlock MonitorHeld Recursion Owning Thread Info          SyncBlock Owner
-----------------------------
Total           1364
CCW             1
RCW             1
ComClassFactory 0
Free            713

什么是GCFrame?什么是CCWRCW?我在文档中找不到它。

这也是找到拥有锁的线程的一种方法吗?

0 个答案:

没有答案