Jon*_*ury 22 c# multithreading deadlock
可能重复:
C#/ .NET分析工具,用于查找竞争条件/死锁
我正在调试一个应用程序,我怀疑它正在陷入僵局并挂起.但是,这只会每隔几天发生一次,并且它永远不会发生在我的计算机上,因此我无法将调试器挂钩.是否有任何实用程序或方法可以用来查询正在运行的应用程序,并找出哪些方法/锁定/它是什么死锁?
更新:通常,应用程序在客户位置运行,我无法访问该计算机,并且我不太愿意让他们安装大量软件.
Bri*_*sen 23
您可以使用WinDbg检查应用程序中的线程.以下是您可以做的简要计划.
!threads命令将显示应用程序和!clrstack命令中的所有线程,将显示它们正在执行的操作.使用~e!clrstack转储全部线程的调用堆栈.查找Wait方法的调用,因为它们表示锁定.!syncblk命令将为您提供有关哪些线程持有不同锁的信息.!dso).从这里你应该能够找到线程试图获取的锁.澄清:WinDbg不需要定期安装.只需复制文件.此外,如果您执行挂起转储,则可以根据需要继续在另一台计算机上进行调试.
增加:Sosex具有!dlk在许多情况下自动识别死锁的命令.它不会一直有效,但是当它发生时,它会为你完成所有的工作,所以这应该是你的第一选择.