C#学习教程:使用Windbg的!clrstack命令调试死锁分享♀?♀使用Windbg的!clrstack命令调试死锁 当我发出clrstack命令时,我得到了以下输出。 它是一个阻塞线程的callstack,它拥有一个死锁并导致死锁。 这是它的确切目的吗? 它是否有任何其他目的(没有任何参数)。 我在哪里可以获得更多信息? !clrstack OS Thread Id: 0x1b2c (6956) ESP EIP 0012f370 7c90e514 [HelperMethodFrame: 0012f370] System.Threading.Thread.SleepInternal(Int32) 0012f3c4 79299275 System.Threading.Thread.Sleep(Int32) 0012f3c8 00e0030f testlock.LockTest.Test() 0012f420 00e00146 testlock.Program.Main(System.String[]) 0012f69c 79e71b4c [GCFrame: 0012f69c] 如何:使用Windbg调试死锁? WinDbg / SOS备忘单 CLRStack [-a] [-l] [-p] [-n]仅提供托管代码的堆栈跟踪。 SOS调试扩展不会在基于x64和IA-64的平台上显示转换帧。 更新 :(感谢@Liran):要查看应用程序中所有线程的调用堆栈,请运行以下命令: ~*e!clrstack (这基本上意味着,“遍历所有线程,并在每个线程上执行’!clrstack’命令”)。 使用史蒂夫约翰逊的sosex 。 这有一个命令来检测你的死锁。 从链接下载扩展并加载它,例如 .load D:sosex_32sosex.dll 然后问题 !dlk 示例输出(取自史蒂夫的网站) 0:010>!dlk检测到死锁:CLR线程4保持同步块00000000024c6970 OBJ:000000007fff0f80 [System.String] STRVAL = SYNC1等待同步块00000000024c6928 OBJ:000000007fff0fa8 [System.String] STRVAL = SYNC2 CLR线程5保存同步块00000000024c6928 OBJ :000000007fff0fa8 [System.String] STRVAL = SYNC2等待同步块00000000024c6970 OBJ:000000007fff0f80 [System.String] STRVAL = SYNC1 CLR线程4正在等待ConsoleTestApp.ConsoleTestApp.MonitorDeadlockThreadProc()+ 0xa4(IL)[C: dev ConsoleTestApp ConsoleTestApp.cs,第195行] CLR线程5在ConsoleTestApp.ConsoleTestApp.MonitorDeadlockThreadProc()+ 0xa4(IL)等待[C: dev ConsoleTestApp ConsoleTestApp.cs,第195行] 另请参阅此链接以了解演练 苔丝在博客上写了很多关于windbg的有用信息。 这是一篇可能会有所帮助的post 。 上述就是C#学习教程:使用Windbg的!clrstack命令调试死锁分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注— 本文来自网络收集,不代表立场,如涉及侵权请点击右边联系管理员删除。如若转载,请注明出处:
