Visual Studio 2010 F10/F11 步进慢,工具栏步进正常?

21

我使用带有 SP1 的 Visual Studio 2010,还安装了 R# 5.1 和一些其他扩展(如 PowerCommands 和 Productivity Power Tools)。在某个时间点之后,我的调试变得非常缓慢。如果我使用 F10/F11 键进行步进,VS 会卡顿一段时间然后才会步进。如果我使用工具栏按钮进行步进,则像预期一样迅速。

你知道我的快捷键出了什么问题吗?


你曾经解决过这个问题吗?我遇到了完全相同的问题。 我已经尝试了以下方法: 禁用所有插件 重置用户数据 与没有问题的用户确认调试设置 删除所有断点 删除SUO文件 目前为止还没有运气。我不明白的是,工具栏按钮为什么会如此快,但快捷键却如此缓慢。我开始怀疑这是否与全局系统热键有关。 - user966711
很遗憾,不行。每天我都想重新格式化这台机器。这真是太痛苦了。工具栏还好,但只要我按下任何键,它就会锁死。奇怪的是,在进程监视器中我没有看到任何峰值或其他东西(但我有一种感觉是因为机器被锁死了)。 - dwhite
1
问题也影响VS2013,在IE的断点调试期间,所有应用程序中的键盘都很慢(不仅在VS内部慢)。 - Jon
1
这对我来说不再是问题了。也许LastPass在更新中修复了这个问题?我有VS2013,但自从遇到这个问题以来(几次)我已经重新格式化了我的机器。你正在运行LastPass吗?确保你有最新的版本。我现在几乎不再使用IE进行调试,除非被迫这样做。我几乎一直使用Chrome。如果您使用其他浏览器进行调试,是否遇到相同的问题?朋友们不要让朋友们使用IE :) - dwhite
1
问题仅出现在IE中,而不是ffox/chrome。我确认了最新的lastpass插件版本(3.1.0)存在问题。我使用IE进行调试,因为VS似乎在它上面进行调试更好。 - Jon
14个回答

27
我曾经遇到过同样的问题 - 用键盘进行调试(例如F10)时非常缓慢。一些症状包括:
  • 如果我在工具栏上点击“单步执行”,那么一切都正常,
  • 在调试期间的延迟不仅出现在Visual Studio中,而且还会在任何地方出现(记事本、浏览器等),
  • 如果我将任何其他浏览器设置为Visual Studio的默认浏览器(我尝试了Firefox),那么它就可以正常工作,
  • 如果我禁用IE中的第三方浏览器扩展,那么它可以正常工作,
  • 如果我启用第三方浏览器扩展并禁用LastPass,则问题消失,使用键盘进行调试变快!

所以,如果您安装了LastPass扩展或所有扩展,请尝试禁用它们。

编辑1 - 有人已经在LastPass论坛上发布了此信息:http://forums.lastpass.com/viewtopic.php?f=12&t=61029

编辑2 - 这个问题也在Stack Overflow上提到了: https://dev59.com/313Ua4cB1Zd3GeqP_E7_#8186670


4
搞定了,非常感谢!我甚至没有想到两者之间的联系。 - dwhite
@sventevit,你能解释一下为什么会发生这种情况吗? - Glimpse
如何将这个数值加上100?这个问题让我抓狂了。 - Jon
这也发生在 VS 2013 中。在 IE 中禁用了 LastPass 扩展程序,现在 F10 的速度很快了。 - Sergey
1
这个问题非常泛泛而谈,但答案却非常具体。不过它解决了我的问题! - Smeghead Sev
显示剩余3条评论

13

我找到了更深入的解释来说明这个问题。

我之前遇到了这个问题,并且出现了user1110039描述的症状,但是我没有安装LastPass工具栏。我的默认浏览器是Firefox。

实际上,我的应用程序使用SetWindowsHookEx()函数来设置系统范围内的快捷键。这恰好是在64位Windows 7下阻止F10/F11调试键的原因,而在32位系统下则不会发生这种情况。

我只是从调试版本中移除了钩子,然后问题就得到了解决。我认为LastPass的问题可能是扩展代码中的某个系统范围内钩子。


我在一个以x86为目标平台的项目中遇到了这个问题。移除对SetWindowsHookEx的使用后,问题得到了解决。 - JYelton
这其实是我的问题 - 我在调试别人的代码。他们使用了KeyboardHookListener,必须调用SetWindowsHookEx - Tim Rutter
我也遇到了同样的问题,在调试版本中移除SetWindowsHookEx(),问题就解决了。 - crazii

6

我曾经遇到过完全相同的问题。 通过关闭观察窗口,问题得以解决。


我尝试了一下,但仍然没有运气。在调试期间,我关闭了监视器、本地变量和调用堆栈,但如果你按键,它仍然会挂起。最终我重新格式化了机器并重新安装了所有东西,但问题仍然存在,尽管比以前稍微好一些(锁定时间更短)。 - dwhite

1
在键盘设备上调用DirectInput的Acquire()函数是导致我的减速的原因。这可能与SetWindowsHookEx()引起的减速有关 - 即可能正在使用DirectInput。

实际上可能是相反的,因为DirectInput现在已被弃用。 - darklon

1

禁用“在源中显示线程”对我有用!


1

尝试使用Firefox或Chrome进行调试。与IE的交互中一定有导致此行为的原因。


1
没有人提到IE,但这就是我遇到问题的地方。而且它仍然存在严重的问题。当我从其他浏览器调试时,我从来没有遇到过问题。这根本不值得被踩。 - CodeMonkeyKing

0

我尝试了所有的建议,最终发现当我卸载了VS2005后,这个问题得到了解决。请注意,在那台机器上安装了VS2005。


0

很奇怪的是,键盘步进速度很慢,而工具栏按钮则没有。通常当我听到关于缓慢步进体验的建议时,我的建议是禁用自动属性和ToString评估,因为这是最可能的原因。

  • 工具->选项
  • 调试器->取消选中“启用属性和.ToString评估”

我不太希望这会修复此实例。听起来像是一个处理键盘输入的行为不端扩展的问题。您最好的选择是逐个禁用扩展并查看哪个可以解决问题。我会按以下顺序进行:

  • Productivity Power Tools
  • Power Commands
  • R#

感谢您的建议,可惜它们没有起作用。我甚至尝试了安全模式开关,但速度仍然很慢。似乎不是插件/扩展的问题。 - dwhite
@dwhite,真的很令人失望。我的下一步将是通过导入/导出设置对话框重置所有设置。 - JaredPar
@dwhite,嗯。下一步是禁用任何符号服务(工具->选项->调试器,删除任何列出的符号服务器)。不过我不指望你有任何符号服务... - JaredPar
禁用ProductivityPowerTools并重新启动Visual Studio对我有帮助。 - argyle

0

请确保您已安装服务包1。我相信他们在调试器中至少修复了一个重要的性能问题。


0

(在旧帖子上做个笔记,这样可以在网络搜索中找到。)

我通常在调试期间保持==反汇编==窗口打开(我有一个大屏幕)。我刚刚发现,如果我也隐藏该窗口,则可以将调试器中的单步执行加速50%。它的-tab-可以存在并且很方便-没有影响-但是窗口本身不应该显示。啊哈。

已经遵循了所有其他建议以及来自其他地方的更多建议,单步执行现在总体上快了约8倍。(现在每秒约2.5步。)Woo-hoo!谢谢大家。

(我不明白他们如何编写如此缓慢的UI代码...我这里有一颗运行速度为20亿周期每秒的CPU...这相当于每个单步执行大约4亿条指令。似乎微软的代码可以更快一点...但是,我从未使用过.NET等。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接