3

我有一个大型的多线程 C# 程序正在开发中,它从几个 VS2010 项目/解决方案中加载多个 DLL。调试它证明比我预期的要困难(谁会想到)。

问题如下。通常情况下,经过几次单步和/或中断所有操作后,程序(或者可能是调试器)进入某种既不运行也不停止的不确定状态。在Debug菜单中,两者ContinueBreak All都是灰色的,所以我无法继续使用该程序。

有时,但并非总是如此,当发生这种情况时,我会在监视窗口中看到一条消息:

函数评估已禁用,因为之前的函数评估超时。

该程序似乎没有运行(没有输出,没有在断点处停止......)并且似乎也没有停止(Watch窗口变灰,Call Stack窗口为空)。

Stop Debugging并且Restart命令可用且有效。

我可以做任何事情以便能够正常调试事物,而无需一遍又一遍地重新启动会话吗?

我是 Windows 环境中的开发新手,可能会遗漏一些明显的东西。

4

1 回答 1

2

正如@Conrad Frix 所说,您最好的选择可能是进行内存转储并检查您的线程在做什么。有许多工具可用于 Windows 和 .Net 开发,每个工具都带来一些不同的东西:

Windbg - 基于文本的内存检查。非常适合深入研究框架/操作系统和检查线程堆栈,但学习曲线非常陡峭。(但是没有比这更强大的了)

JetBrains dotTrace - 如果您使用它,则与 Reshaper 集成。虽然不是我的经验中最好的结果。

RedGate ANTS - 我最喜欢的“现代”基于 GUI 的分析器。这使您可以很好地了解线程正在做什么,但是如果您的应用程序中有数百个线程,则可能会有点难以使用。

Jetbrains 和 RedGate 是付费产品,因此您可能需要使用他们的免费试用版来解决您的问题。

于 2012-11-21T15:51:28.033 回答