在调试时无法评估表达式

问题描述 投票:42回答:5

当调试asp.net代码(针对IIS运行,并使用Visual Studio 2013)并在断点中尝试使用快速监视来评估变量时,我经常会“无法评估表达式”。

从asp.net项目文件夹中删除.suo似乎解决了问题(重新加载解决方案后)

这是一个公认的错误吗?现在在Visual Studio 2013中在多台计算机上获得了很多。

c# asp.net vb.net visual-studio-2013
5个回答
87
投票

我今天用VS2013面对它了。

转到工具 - >选项 - >调试 - >常规 - >滚动到“使用管理兼容模式”的底部,然后选择选项。

博客的屏幕截图(下面的网址):重新启动调试。希望它能帮助别人。

是什么帮助我在下面!


7
投票

C#调试引擎在很大程度上依赖于CLR调试器来评估表达式。该消息表明CLR处于无法执行简单评估的状态,其原因可能包括以下内容:

  • 局部变量被优化掉了
  • 线程在GC不安全点停止
  • 前一个函数调用导致调试器进入错误状态,因此无法进行进一步的评估

1
投票

其中一些选项随着时间的推移而改变 - 其他答案中的最高评级解决方案似乎不再存在 - 搜索选项对话框可以提供帮助。

现在,对于一个ASPNET核心项目,我找到了this,并启用它似乎有助于:

enter image description here

抑制模块加载时的JIT优化(仅限托管):加载模块时禁用托管代码的JIT优化,并在附加调试器时编译JIT。禁用优化可能会使调试某些问题变得更容易,但会牺牲性能。如果您使用的是Just My Code,则禁止JIT优化会导致非用户代码显示为用户代码(“我的代码”)。有关更多信息,请参阅JIT优化和调试。

如果它似乎没有帮助我建议再次关闭它。


0
投票

我已针对特定项目遇到此问题,原因是Costura.Fody(将所有DLL嵌入到执行程序集中)。

在这种情况下,您可以禁用Costura.Fody.

  1. 从FodyWever.xml中评论出Costura <Weavers> <!--<Costura />--> </Weavers>
  2. 禁用* .csproj中的干净引用目标(如果包含) <!--<Target Name="CleanReferenceCopyLocalPaths" AfterTargets="AfterBuild"> <Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)% (DestinationSubDirectory)%(Filename)%(Extension)')" /> <Exec Command="DeleteEmptyDirectory.bat" /> </Target>-->

-3
投票

转到Tools --> Options --> Environment --> General -->,选中“根据客户端性能自动调整视觉体验”选项。

© www.soinside.com 2019 - 2024. All rights reserved.