最近我开始研究VS2012。
当我调试我的代码(这是一个SharePoint 2013应用程序)并试图获取变量的值时 - 我反复收到消息:
Function evaluation disabled because a previous function evaluation timed out.
You must continue execution to reenable function evaluation.
我之前曾在visual studio 2010(适用于SharePoint 2010应用程序)工作,并且在尝试获取Quick Watch中变量的值时几乎从未收到此消息。
我用Google搜索了错误消息,我发现在尝试获取其操作需要很长时间的函数值时会出现问题, 但我不是想获得函数的值,只是变量,但我得到了这个错误。
我并不总是在相同的变量上得到错误,而是随机 - 每次都有不同的变量。
是否还有其他人在VS2012中 ?
我怎么能摆脱它?
答案 0 :(得分:22)
Pierre Fourgeaud很好地回答了你的问题。我从Hans Passant那里补充了一些内容:
调试器在单独的工作线程上执行监视表达式 这是在进程内运行。调试器为5 秒,然后声明监视表达式不可用并显示 “功能评估超时”。调试器然后变得脾气暴躁,而不是 它可以用那个被阻塞的线程来做,你通常会看到“功能 评估已禁用,因为之前的功能评估已超时。 你必须继续执行以重新启用功能评估。“这是 好建议。
答案 1 :(得分:9)
为什么会这样?
当你试图观察一些必须是线程安全的变量但有时候这个框架实现并不完美时,这种错误似乎就会发生....
要避免此问题:当单步执行变量绑定到窗口或其他控件的代码时,不会显示局部变量或“自动”变量。只有在确定您的变量可以安全查看时,才能查看这些内容。请注意,错误不一定出现在不安全的变量上。在危险代码中操作时,请使用安全(即非控制)变量的“立即”窗口。
数据访问器应始终是线程安全的。但有时在两个实现之间(假设在Sharepoint 2010和Sharepoint 2012之间或两个版本的.NET框架之间),这个规则有时不正确。 VS2003和2005之间有一些例子......
如何增加超时?
您可以使用HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\Debugger
更改注册表项RegEdit
的值来增加超时。
更改注册表项后,不要忘记重新启动Visual Studio。