【问题标题】: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)。

    作为更持久的解决方案,您可以做以下两件事之一:

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

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多