Mat*_*ley 27 c# multithreading deadlock
除此之外我不知道我现在是否可以重现它(我已经使用这个特定的应用程序一两个星期没有问题),假设我在VS调试器中运行我的应用程序,如何它应该在它发生之后调试死锁吗?如果我暂停程序并因此看到不同的线程发生在哪里,我认为我可能能够获得调用堆栈,但是单击暂停只会使Visual Studio陷入死锁,直到我杀死我的应用程序.
除了浏览我的源代码树以寻找潜在问题之外,还有其他方法吗?一旦出现问题,是否有办法获得调用堆栈以查看问题所在?任何其他可能有用的工具/提示/技巧?
chr*_*166 10
你做的是正确的方法.如果Visual Studio也死锁,那么偶尔会发生这种情况.这只是运气不好,除非还有其他一些问题.
您不必在调试器中运行该应用程序即可进行调试.正常运行应用程序,如果发生死锁,您可以稍后附加VS. 按Ctrl + Alt + P,选择进程,选择调试器类型,然后单击附加.使用一组不同的调试器类型可能会降低VS崩溃的风险(特别是如果您不调试本机代码)
死锁涉及2个或更多线程.您可能知道第一个(可能是您的UI线程),因为您注意到应用程序中的死锁.现在你只需要找到另一个.有了架构知识,它应该很容易找到(例如,其他线程使用相同的锁,与UI交互等)
如果VS不工作,在所有的,你总是可以使用的WinDbg.在此处下载:http://www.microsoft.com/whdc/devtools/debugging/default.mspx