从一周前回来我看到VS2010的一个非常烦人的行为: 当我正在调试一个项目并且调试器在断点处停止时,Windows冻结了将近十秒钟。我说“Windows冻结”,因为鼠标和键盘在这段时间内没用。
问题只发生在我调试一个特定的项目时,我在两台不同的机器上尝试了同样的结果。该项目是WPF,我确实在某一点上挂了键盘(虽然不是鼠标)但是这个代码在问题只有一周之后几个月没有被触及。
在这开始显示之前,我确实安装了Telerik的大套件(试用版),所以我的第一个怀疑是Telerik的VS集成是罪魁祸首。我卸载了所有Telerik VS集成(“JustXXX”产品),但问题仍然存在。
我会非常感谢任何人在这里提出可能会发生什么的提示。
由于
编辑1: 我现在尝试构建一个新的解决方案,将所有项目移入其中,但问题仍然存在。
然后我卸载了Telerik所有的东西,只是为了确保,但这也没有效果。
接下来的测试是在不同的机器上加载完全相同的解决方案,这确实有所帮助。除了reSHarper 6.1之外,该机器没有与VS2010的第三方集成。
我还对这个问题进行了更多的分析,典型情况是前几次断点被UI冻结大约十秒钟。鼠标/键盘停止响应,但光标在代码编辑器中保持闪烁。接下来的几个断点都是一样的,经常从一行走到另一行会导致很长的延迟(尽管没有UI冻结)。
此外,如果在我的应用程序启动代码中很早就设置了第一个断点,我可能不会遇到问题。但是当我继续逐步完成代码时,调试器变得更加缓慢,因为应用程序初始化自己(在单独的线程中)。
正如我之前所说的那样,对于单个应用程序来说,所以代码显然是以某种方式相关的。
有没有人对调试器的运行方式有很好的了解?除了设置断点或用户从一行走到另一行(刷新堆栈跟踪和监视窗口)所需的明显步骤之外,后台发生的事情可能会冻结所有内容以及如何实现?
我最后的希望是完全重新安装VS2010,但我希望我能在解决此问题之前解决这个问题。
答案 0 :(得分:2)
我终于找到了这种奇怪行为的原因。正如我在原帖中所提到的,我在应用程序的初始化过程中挂钩了键盘( AND 鼠标,我忘记了我做了那个),以便能够检测到用户不活动。
监视发生在后台线程中,该线程只是等待AutoResetEvent
发现用户活动或不活动。由于某些奇怪的原因,AutoResetEvent.WaitOne(...)
以某种方式影响调试器。我目前的解决方法是在调试器连接时避免等待。
我仍然无法解释为什么会发生这种情况。它已经工作了一年,但最终找到并处理了问题的原因。
我已将问题提交给Microsoft,希望得到一个很好的解释。如果我这样做,我会在这里发布。
答案 1 :(得分:-1)
如果你真的遇到一个项目/解决方案的问题,你可以尝试创建一个新的空解决方案并在那里添加项目,这可能会有所帮助。
我对Visual Studio的内部工作原理并不是很了解(毕竟它必须是最复杂的软件之一)。但我所学到的是,重新安装通常是最好的最快解决方案(即使需要一两个小时)。只需确保备份您不想丢失的任何设置。
<强>更新强>:
我在这里找到了这个,也许你已经找到了它:http://connect.microsoft.com/VisualStudio/feedback/details/260864/visual-studio-debugger-occasionally-locks-up-the-entire-windows-gui
您可以尝试一下并禁用语言栏。