知道应用程序在什么时候冻结

Abr*_*ile 5 c#

我正在用C#开发一个WinForm多线程应用程序.有时我的应用程序会挂起,或冻结或阻塞.

当这种情况发生并且我在DEBUG模式下运行时,无论如何都要了解我的应用程序当前的代码行是什么?由于它被冻结,我希望找到一个应用程序被锁定或阻止的点或其他什么.有可能这样做吗?

当它被冻结时,我试图打开CALL STACK窗口,但这不会显示任何信息; 我可能会采取一些行动吗?有些"暂停和检查"或其他什么?

Ree*_*sey 5

您可能需要打开"线程"窗口,然后更改当前线程.在调试时,选择Debug-> Break All,然后打开Threads窗口.如果您浏览每个线程,通过双击该线程,您应该能够调查每个线程的调用堆栈.

话虽这么说,如果你可以在VS 2010中运行你的程序 - 这会变得容易多了.在VS 2010中,您可以使用新的Concurrency Profiler,并在Concurrency Profiler下运行代码,并选择"可视化多线程应用程序的行为".一旦你的应用程序锁定,杀死它,让分析器流失 -

最后,您将获得一个图表,其中显示了程序中的每个线程以及它们何时被锁定.将显示每个被阻塞线程的callstack,以及所持有的锁(使用源代码行).这样可以很容易地找到死锁.