我正在开发一个大型多线程C#程序,它从多个VS2010项目/解决方案中加载多个DLL。调试它证明比我预期的更困难(谁想)。
问题如下。通常,在几次步进和/或中断操作之后,程序(或者可能是调试器)进入某种既不运行也不停止的不确定状态。在Debug
菜单中,Continue
和Break All
都显示为灰色,因此我无法继续使用该计划。
有时候,但并非总是如此,当发生这种情况时,我会在观察窗口看到一条消息:
功能评估已禁用,因为之前的功能评估已超时。
程序似乎没有运行(没有输出,没有在断点处停止......)并且似乎也没有停止(Watch
窗口显示为灰色,{{1}窗口是空的)。
Call Stack
和Stop Debugging
命令可用且有效。
我可以做任何事情,以便能够正常调试,而无需重复重启会话吗?
我是Windows环境中的新手,可能会遗漏一些明显的东西。
答案 0 :(得分:2)
正如@Conrad Frix所说,你最好的选择可能是采取内存转储&检查你的线程正在做什么。有许多适用于Windows和Windows的工具。 .Net开发,每个都带来了一些不同的东西:
Windbg - 基于文本的内存检查。非常适合深入挖掘框架/ OS&检查线程堆栈,但是有一个非常陡峭的学习曲线。 (但不会比这更强大)
JetBrains dotTrace - 如果您使用它,则与Reshaper集成。然而,根据我的经验,这不是最好的结果。
RedGate ANTS - 我最喜欢的“现代”基于GUI的分析器。这为您提供了对线程正在做什么的非常好的见解,但如果您的应用程序中有数百个线程,则可能有点难以使用。
Jetbrains& RedGate是付费产品,因此您可能需要使用免费试用来解决您的问题。