【问题标题】:vs2012 debugger hangs while i want to expand some collection variablevs2012 调试器挂起,而我想扩展一些集合变量
【发布时间】:2013-08-06 12:50:43
【问题描述】:
我正在使用VS2012 Ultimate调试一个项目,但现在经常遇到这个问题。通常,当我想扩展集合类型值(例如 List、Dictionary 等)以查看其值时,会发生这种情况。它只是未能显示该值然后永远挂起,错误消息就像
“函数评估已禁用,因为之前的函数评估超时。您必须继续执行才能重新启用函数评估。”我唯一能做的就是重新启动调试器。
有人可以帮忙吗?
【问题讨论】:
标签:
debugging
visual-studio-2012
visual-studio-debugging
【解决方案1】:
当您在调试器中展开一个值以查看其成员时,调试器会在后台执行称为“func-eval”的操作,这基本上意味着它“唤醒”被调试对象中的一个线程并运行一些代码以显示其结果。这通常是执行属性的 getter 或对象的 .ToString() 方法。
有时,评估可能需要很长时间(通常是因为属性 getter 卡在等待另一个线程持有的某个锁上,在这种情况下,您可以一直等待并且它永远不会返回,因为所有线程除了执行 func-eval 的线程被调试器暂停)。在这些情况下,过一会儿调试器将决定“放弃”并显示您遇到的消息。您无需重新启动应用即可再次尝试评估属性 - 您只需执行另一个 Step Over (F10)。
作为更持久的解决方案,您可以做以下两件事之一:
- 进入工具->选项->调试->常规并禁用“启用属性评估和其他隐式函数调用”。这将使调试器的显示变得不那么有用,因为您只能查看字段,但它保证您永远不会卡住并收到超时消息。
- 尝试找出哪个对象中的哪个属性是保持超时的属性。这可能有点棘手,通过尝试在发生这种情况时注意您正在查看的对象 - 超时通常会在您向下滚动到有问题的属性后发生。一旦知道哪个属性有问题,要么将其更改为方法,要么将
[DebuggerBrowsable(DebuggerBrowsableState.Never)] 放在其上方以防止调试器显示它。