vs2012调试器挂起,而我想扩展一些集合变量

时间:2013-08-06 12:50:43

标签: debugging visual-studio-2012 visual-studio-debugging

我正在使用VS2012 ultimate调试项目,但现在经常遇到这个问题。通常它发生在我想要扩展集合类型值(例如,List<>,Dictionary<>等)以观察其值时。它只是没有显示值,然后永远挂起,错误信息就像 “由于先前的功能评估超时,功能评估被禁用。您必须继续执行以重新启用功能评估。”我唯一能做的就是重启调试器。 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:4)

当您在调试器中展开一个值以查看其成员时,调试器在幕后执行称为“func-eval”的事情,这基本上意味着它“唤醒”调试对象中的一个线程并运行一些代码在其中以显示其结果。这通常是执行属性的getter或对象的.ToString()方法。

有时候,评估可能需要太长时间(通常是因为属性获取器在另一个线程持有的某个锁上等待等待,在这种情况下,你可以永远等待它永远不会返回,因为所有线程除外正在执行func-eval的线程被调试器暂停。在这些情况下,一段时间后调试器将决定“放弃”并显示您遇到的消息。您不必重新启动应用程序以尝试再次评估属性 - 您只需执行另一个步骤(F10)。

作为一种更持久的解决方案,您可以执行以下两项操作之一:

  1. 进入工具 - >选项 - >调试 - >常规并禁用“启用属性评估和其他隐式函数调用”。这将使调试器的显示效果低得多,因为您只能查看字段,但保证您永远不会卡住并收到超时消息。
  2. 尝试确定哪个对象是保持超时的对象。这可能有点棘手,通过尝试在发生这种情况时注意您正在查看的对象 - 超时通常会在您向下滚动到有问题的属性之后发生。一旦知道哪个属性有问题,可以将其更改为方法,或将[DebuggerBrowsable(DebuggerBrowsableState.Never)]置于其上方以防止调试器显示它。