gpt4 book ai didi

debugging - 当我想扩展一些集合变量时 vs2012 调试器挂起

转载 作者:行者123 更新时间:2023-12-04 02:49:28 25 4
gpt4 key购买 nike

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

最佳答案

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

有时,评估可能会花费太长时间(通常是因为属性 getter 卡在等待另一个线程持有的某个锁上,在这种情况下,您可能会一直等待并且它永远不会返回,因为所有线程除了正在执行 func-eval 的线程被调试器暂停了)。在这些情况下,稍后调试器将决定“放弃”并显示您遇到的消息。您无需重新启动您的应用程序即可再次尝试评估属性 - 您只需再执行一次 Step Over (F10)。

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

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

关于debugging - 当我想扩展一些集合变量时 vs2012 调试器挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18080705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com