2

从一周前开始,我看到 VS2010 的一个非常烦人的行为:当我正在调试一个项目并且调试器在断点处停止时,Windows 冻结了将近十秒钟。我说“Windows 冻结”是因为在这段时间内鼠标和键盘都没用。

问题仅在我调试特定项目时发生,并且我在两台不同的机器上尝试过,结果相同。该项目是WPF,我确实在某一点上钩住了键盘(虽然不是鼠标),但该代码几个月没有被触及,而问题只有一周之久。

在这开始显示之前,我确实安装了 Telerik 的所有东西(试用版),所以我的第一个怀疑是 Telerik 的 VS 集成是罪魁祸首。我卸载了所有 Telerik VS 集成(“JustXXX”产品),但问题仍然存在。

我会非常感谢安倍的任何人提供关于这里可能发生的事情的提示。

谢谢

编辑 1: 我现在尝试构建一个新的解决方案,将所有项目移入其中,但问题仍然存在。

然后我卸载了 Telerik 的所有东西,只是为了确保,但这也没有效果。

下一个测试是在另一台机器上加载完全相同的解决方案,这确实有帮助。除了 reSHarper 6.1 之外,该机器没有与 VS2010 的第 3 方集成。

我还对这个问题进行了更多分析,典型的情况是,前几次断点被击中,UI 冻结了大约十秒钟。鼠标/键盘停止响应,但光标在代码编辑器中不断闪烁。接下来的几个断点也是如此,通常从一行跳到另一行会导致很长的延迟(尽管没有 UI 冻结)。

此外,如果在我的应用程序启动代码中很早就设置了第一个断点,我可能不会遇到问题。但是当我继续单步调试代码时,调试器会随着应用程序自身的初始化(在单独的线程中)变得更加迟缓。

正如我之前所说,这发生在单个应用程序中,因此代码显然以某种方式相关。

有没有人对调试器的运行方式有很好的了解?除了设置断点或用户从一行到另一行(刷新堆栈跟踪和监视窗口)时所需的明显步骤之外,后台发生了什么可能会冻结所有内容,这怎么可能?

我最后的希望是完全重新安装 VS2010,但我希望我能在需要该选项之前解决这个问题。

4

2 回答 2

4

我终于找到了这种奇怪行为的原因。正如我在原始帖子中提到的那样,我在应用程序初始化期间确实挂上了键盘(鼠标,我忘记了我这样做了),以便能够检测到用户的不活动。

监视发生在后台线程中,该线程只是等待AutoResetEvent发现用户活动或不活动。出于某种奇怪的原因,它AutoResetEvent.WaitOne(...)会以某种方式影响调试器。我目前的解决方法是在附加调试器时避免等待。

我仍然无法解释为什么现在会发生这种情况。它已经工作了一年,但问题的原因终于找到并处理了。

我已经向微软提交了我的问题,希望得到一个很好的解释。如果我这样做,我会在这里发布。

于 2012-06-04T13:45:33.787 回答
-1

如果您确实对一个项目/解决方案有问题,您可以尝试创建一个新的空解决方案并在那里添加项目,也许这会有所帮助。

我对 Visual Studio 的内部工作原理了解不多(毕竟它一定是最复杂的软件之一)。但我了解到,重新安装通常是最好和最快的解决方案(即使需要一两个小时)。只要确保备份您不想丢失的任何设置。

更新

我在这里找到了这个,也许你也已经找到了:http ://connect.microsoft.com/VisualStudio/feedback/details/260864/visual-studio-debugger-occasionally-locks-up-the-entire-windows -gui

您可以尝试一下并禁用语言栏。

于 2012-05-30T16:42:02.190 回答