"无法计算表达式,因为Visual Studio 2010中的当前方法的代码已经过优化"

Ton*_*ich 144 c# visual-studio-2010 visual-studio

我在调试模式下使用Visual Studio 2010,并且未选中"优化代码".我无法快速监视(或悬停)调试器中的任何变量.我收到此错误"无法计算表达式,因为当前方法的代码已经过优化".

即使是像:int i = -3这样的行,快速监视i,我得到"无法获得本地或参数'i'的值,因为它在指令指针处不可用,可能是因为它已被优化掉了."

在类似问题中引用的此链接似乎不适用.

我缺少一个设置吗?

Ton*_*ich 162

虽然项目处于调试模式,但解决方案却没有.当我改变它,它工作.

  • 那么......如何将解决方案设置为非调试模式? (18认同)
  • 我在VS2012中遇到过这个问题,但是解决方案和所有项目都设置为Debug而没有优化.我清理解决方案/重建为我修复它. (9认同)

Vin*_*Vin 46

我在使用VS 2010时遇到了这个问题.我的解决方案配置选择了(调试).我通过取消选中项目属性下的Optimize Code属性来解决这个问题.项目(右键单击)=>属性=>构建(选项卡)=>取消选中优化代码


Jus*_*tin 28

听起来您正在调试优化/发布版本,尽管未经检查优化框.你可以尝试的事情是:

  • 完整重建解决方案文件(右键单击解决方案并选择Rebuild all)
  • 在调试时打开模块窗口(Debug - > Windows - > Modules)并在已加载模块列表中找到程序集.检查针对加载的程序集列出的路径是否符合预期,并且文件的修改时间戳表明程序集实际已重建.
  • 模块窗口还应该告诉您加载的模块是否已优化 - 确保模块窗口指示它未进行优化.

如果在Debug - > Windows菜单中看不到Modules菜单项,则可能需要在"Customize ..."菜单中添加它.

  • 解决方案已重建.模块窗口显示组件已优化.我没有选中优化复选框,所以我不知道为什么总是优化程序集.该解决方案有一个Web项目,但我正在查看的代码是在调试模式下的类库项目中. (2认同)

far*_*ast 20

对我来说,它发生在 VS2017 和 VS2019 中。在我选择了“模块加载时抑制 JIT 优化”选项后,它停止了。

在此处输入图片说明

  • +1,这就是我的问题的原因。VS 似乎不太擅长实际理解 csproj 选项,因为当配置以“调试”结束时,我在 XML 中关闭了优化。直接调用 MSBuild 时它工作正常,但在 VS 本身中不太正确。 (2认同)
  • 这解决了我的 Visual Studio 2019 问题实例 (2认同)

Jes*_*sse 14

在VS2013中,转到:工具 - >选项 - >调试 - >常规并启用"使用托管兼容模式".这会禁用新的功能评估行为.


the*_*stv 9

尝试在调试模式下运行.如果您在发布模式下运行,您将收到此消息.

  • 这个问题很明显,"我在调试模式下使用Visual Studio 2010并且我已经"优化代码"未经检查."...你应该删除这个非答案. (3认同)

Ala*_*jeu 7

我的情况没有被上述任何答案所涵盖.我发现以下内容:关于线程的MSDN文章解释了当卡在一些原始的本机线程操作中时,调试器无法访问数据.例如,当一个线程位于Task.Wait()上时,就会出现这种情况.


riQ*_*iQQ 7

我有同样的问题。但是在我的情况下,该Debuggable属性已硬编码在AssemblyInfo.cs我的项目文件中,因此没有(过度)通过编译写入。在删除指定Debuggable属性的行后,它起作用了。


小智 5

我在VS2008中遇到了同样的问题.在我的情况下,它通过解决方案重建解决.