调试时无法评估表达式
Posted
技术标签:
【中文标题】调试时无法评估表达式【英文标题】:unable to evaluate expression whilst debugging 【发布时间】:2014-02-05 15:51:05 【问题描述】:在调试 asp.net 代码(针对 IIS 运行,并使用 Visual Studio 2013)并在断点中并尝试使用快速监视评估变量时,我经常得到“无法评估表达式”。
从 asp.net 项目文件夹中删除 .suo 似乎可以解决问题(重新加载解决方案后)
这是一个公认的错误吗?现在在不止一台机器上的 Visual Studio 2013 中得到了很多。
【问题讨论】:
我也见过这个。就我而言,我怀疑它与调试加载了多个 AppDomain 的进程有关。您的应用程序池中是否有多个应用程序? 必须在调试模式下编译?是单个项目还是包含多个项目? @jlew 在应用程序池中只有一个应用程序。 tim-schmelter 是的,它编译为调试模式... 出于绝望,我重新启动了我的系统,它神奇地又开始工作了...... 删除 suo。文件对我帮助很大 【参考方案1】:我今天用 VS2013 面对它。
转到工具 --> 选项 --> 调试 --> 常规 --> 滚动到“使用托管兼容模式”的底部并选择该选项。
博客截图(网址如下): 重新开始调试。希望对其他人有所帮助。
下面是什么帮助了我!
Visual Studio 2013 Could not evaluate Expression Debugger Abnormality 结果非常有帮助。
另外,你可以看到@Dreamers 回答Unable to debug managed code using visual studio 2013
【讨论】:
非常感谢。很好的答案。 :) 我这样做了,但没什么区别,多年来我一直在调试 C# 和 C++,在过去的几天里,无论我使用 VS2015 选择什么选项,我都无法查看我的 c++ 成员变量。 按照你的步骤,但仍然没有得到结果!! ! 请注意,某些功能不适用于托管兼容模式(例如实时代码修改、性能测量工具等) 对我来说这个选项是灰色的【参考方案2】:C# 调试引擎严重依赖 CLR 调试器来评估表达式。该消息表明 CLR 处于无法执行简单评估的状态,其原因可能包括以下
一个局部变量被优化掉了 线程在 GC 不安全点停止 先前的函数调用导致调试器进入错误状态,因此根本无法进行进一步评估【讨论】:
这条消息是我只在 vs2013 RTM 中注意到的,不记得在 vs2013RC(和测试版)、2012 或 2010 中注意到它(调试时)。【参考方案3】:其中一些选项会随着时间而变化 - 其他答案中评价最高的解决方案似乎不再存在 - 搜索选项对话框会有所帮助。
现在我找到了一个 ASPNET Core 项目this,启用它似乎有帮助:
抑制模块加载时的 JIT 优化(仅限托管):禁用 加载模块且 JIT 运行时托管代码的 JIT 优化 在附加调试器时编译。禁用优化可能 使调试一些问题变得更容易,尽管代价是 表现。如果您使用 Just My Code,则禁止 JIT 优化可能会导致非用户代码显示为用户代码(“我的 代码”)。更多信息,请参阅 JIT 优化和调试。
如果它似乎没有帮助,我建议再次将其关闭。
【讨论】:
哦,谢谢,仍然适用于 vs 2019 来评估 linq 查询 这有助于我在 2019 年的 Visual Studio 中尝试在运行时调试期间仔细查看数据集。在设置之前,一切都是“无法评估表达式”。【参考方案4】:我在特定项目中遇到过这个问题,原因是 Costura.Fody(将所有 DLL 嵌入到正在执行的程序集中)。
在这种情况下,您可以禁用Costura.Fody.
从 FodyWever.xml 中注释掉 Costura
<Weavers>
<!--<Costura />-->
</Weavers>
在 *.csproj 中禁用干净的引用目标(如果包含)
<!--<Target Name="CleanReferenceCopyLocalPaths" AfterTargets="AfterBuild">
<Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)%
(DestinationSubDirectory)%(Filename)%(Extension)')" />
<Exec Command="DeleteEmptyDirectory.bat" />
</Target>-->
【讨论】:
就我而言,这是值得付出努力的解决方案。【参考方案5】:转到Tools --> Options --> Environment --> General -->
,勾选“根据客户端性能自动调整视觉体验”选项。
【讨论】:
以上是关于调试时无法评估表达式的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Visual Studio 2013 调试托管代码(“无法评估表达式”错误 - 正在使用调试版本)(请注意,VS 2012 有效)
Visual Studio 2010 中的“无法评估表达式,因为当前方法的代码已优化”
尝试调试 WCF 服务代码(MSVS 2013)时,在“添加监视”功能上获取“表达式评估器中的内部错误”