调试时无法评估表达式

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 --&gt; Options --&gt; Environment --&gt; General --&gt;,勾选“根据客户端性能自动调整视觉体验”选项。

【讨论】:

以上是关于调试时无法评估表达式的主要内容,如果未能解决你的问题,请参考以下文章

错误指针:解析标记时无法评估表达式

无法使用 Visual Studio 2013 调试托管代码(“无法评估表达式”错误 - 正在使用调试版本)(请注意,VS 2012 有效)

Visual Studio 2010 中的“无法评估表达式,因为当前方法的代码已优化”

尝试调试 WCF 服务代码(MSVS 2013)时,在“添加监视”功能上获取“表达式评估器中的内部错误”

IntelliJ:求值lambda表达式在调试时引发编译错误

在 intellij 上调试评估表达式