VS2012调试器在我想展开某些集合变量时挂起

3

我正在使用VS2012 ultimate调试一个项目,但是现在经常遇到这个问题。通常当我想要展开一个集合类型的值(例如List<>,Dictionary<>等)以查看其值时,它就无法显示该值,然后永远挂起,错误信息如下:“因为上一个函数评估超时,所以禁用了函数评估。您必须继续执行才能重新启用函数评估。” 我唯一能做的就是重新启动调试器。 有人能给些建议吗?

1个回答

4
当你在调试器中展开一个值以查看其成员时,调试器会在幕后执行一些称为“func-eval”的操作,这基本上意味着它会“唤醒”调试对象中的一个线程并在其中运行一些代码以显示其结果。通常情况下,这要么是执行属性的getter,要么是执行对象的.ToString()方法。
有时,评估可能会花费太长时间(通常是因为属性getter被卡在等待某个由另一个线程持有的锁上,此时,您可能会一直等待并且永远不会返回,因为除了执行func-eval的线程之外的所有线程都被调试器暂停)。在这些情况下,过了一会儿,调试器将决定“放弃”,并显示您遇到的消息。您无需重新启动应用程序即可尝试重新评估属性 - 您只需执行另一个步骤跳过(F10)。
作为更永久的解决方案,您可以执行以下两种操作之一:
1. 进入“工具”->“选项”->“调试”->“常规”,然后禁用“启用属性评估和其他隐式函数调用”。这将使调试器的显示功能大大降低,因为您只能查看字段,但是它确保您永远不会被卡住并收到超时消息。
2. 尝试找出哪个对象中的哪个属性是导致超时的属性。这可能有点棘手,但请尝试注意在发生此情况时您正在查看哪些对象 - 超时通常会在您滚动到有问题的属性之后发生。一旦您知道是哪个属性有问题,可以将其更改为方法,或者在其上方放置 [DebuggerBrowsable(DebuggerBrowsableState.Never)] 以防止调试器显示它。

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