如何防止Visual Studio调试器可视化工具超时?

36

我成功地制作了多个 Visual Studio 调试器可视化器,它们运行得非常好,但是在某些对象上,当我尝试使用 objectProvider.GetObject() 反序列化对象时,我会收到超时错误。

System.Exception: Function evaluation timed out.
  at Microsoft.VisualStudio.DebuggerVisualizers.DebugViewerShim.PrivateCallback.MaybeDeserializeAndThrowException(Byte[] data)

点击可视化图标后可能只需要不到一秒的时间就会超时,尽管我的其他一些可视化工具可以正常工作,即使显示较长的数据对象(5-10秒),仍然不会超时。

我已经创建了一个自定义对象源来限制序列化到我需要显示的字段。除此之外,还能做些什么来避免数据反序列化超时呢?


注意:我会将此作为评论发布,但没有足够的声望。对于我的版本(2017年),我还需要一个单独的堆栈溢出帖子,结合这里的答案才能使其正常工作。2017年将其reg密钥私有存储在AppData中,您需要将其加载到注册表编辑器中,以便能够遵循本帖子的接受答案中的建议。这是另一篇文章的链接:https://dev59.com/jVgR5IYBdhLWcg3wnORw - cfalck
3个回答

44
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Debugger

我认为这并未被记录下来,但你可以尝试修改上述注册表键中的一些超时时间,然后重新启动Visual Studio。


26
看起来NormalEvalTimeout是需要更改的值(以毫秒为单位指定值)。如果使用此功能(在调试器中悬停在变量上以查看其当前值),则也值得更新QuickwatchTimeout。如果需要还原它们,则这些值的默认值分别为5000和15000。 - alastairs
3
与其他注册表键一样,请确保 Visual Studio 已关闭(没有正在运行的 devenv 进程),否则在退出时 VS 会覆盖该值! - ashes999
4
我正在搜索VS2017中的这个功能,但在任何版本的文件夹下都找不到。 - Chris
2
类似的问题针对VS2019 - 这个设置被移动到哪里了? - David Burg
@DavidBurg 请参考 https://dev59.com/jVgR5IYBdhLWcg3wnORw#41122603。 - svick

5

我最近在VS2012中遇到了这个问题,通过谷歌搜索我找到了这个:

正如异常信息所说,这个异常意味着数据表的调试器可视化工具已超时。在VS调试器中,每个表达式评估窗口(例如监视窗口、本地窗口、数据提示、自动窗口等)都有不同的默认最大表达式评估超时值。对于数据提示,我们更倾向于给出较短的超时值,否则它会提供一个贫乏的用户表达式。如果您确实想要使用该数据表的可视化功能,则可以将表达式添加到监视窗口并尝试可视化它(因为监视窗口具有更长的超时值)。如果您确实想要摆脱数据提示中的超时问题,则可以尝试增加数据提示的超时值。超时值是在以下注册表键下的“DataTipTimeout”设置中的: HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\Debugger 注意:对于64位操作系统,您应该探测WOW64Node。您还可以在此键下查看其他窗口的默认超时值。


0
为了让 Visual Studio 调试器中的“本地变量”窗口在“WPF 可视化程序”中正常工作(已在 WPF 应用程序中测试),需要在注册表中找到以下键值:HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\Debugger\,然后设置 DWORD 参数“LocalsTimeout”的默认值(1000)为足够大的值,例如 5000。

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