当前位置:  开发笔记 > 编程语言 > 正文

什么"无法评估表达式,因为当前方法的代码已经过优化." 意思?

如何解决《什么"无法评估表达式,因为当前方法的代码已经过优化."意思?》经验,为你挑选了5个好方法。

我写了一些带有大量递归的代码,需要花费很多时间才能完成.每当我"暂停"运行以查看我得到的结果:

无法计算表达式,因为当前方法的代码已经过优化.

我想我明白这意味着什么.然而,让我感到困惑的是,在我点击步骤之后,代码不再"优化"了,我可以查看我的变量.这是怎么发生的?代码如何在优化代码和非优化代码之间来回切换?



1> No one..:

虽然Debug.Break()行位于callstack之上,但您无法eval表达式.那是因为该线路已经过优化.按F10移动到下一行 - 一行有效的代码 - 手表将起作用.


我的前两句话也回答了这一部分.
这就是答案.希望它最终会被标记为这样.
问题是"这是什么意思"而不是我如何解决这个问题.

2> Lamar..:

您可能尝试在发布模式而不是调试模式下调试应用程序,或者在编译设置中打开了优化.

当使用优化编译代码时,某些变量一旦在函数中不再使用就会被丢弃,这就是您获取该消息的原因.在禁用优化的调试模式下,您不应该收到该错误.


正确,没有优化.

3> Nescio..:

调试器使用FuncEval来"查看"变量.FuncEval要求在GarbageCollector安全点的托管代码中停止线程.手动"暂停"IDE中的运行会导致所有线程尽快停止.您的高递归代码将倾向于停在不安全的位置.因此,调试器无法计算表达式.

按F10将移至下一个Funceval Safe点并启用功能评估.

有关详细信息,请查看FuncEval的规则.


这不是答案.请不要只链接(特别是对于没有明确回答问题的大块信息).
我自己也想知道这个问题,总结一下你的答案中博客文章的重点是很好的.
这似乎仍然是公认的答案,所以我更新了我的答案.

4> 小智..:

这让我发疯了.我尝试使用Managed和Native代码附加 - 没有去.

这对我有用,我终于能够评估所有表达式:

进入项目/属性

选择Build选项卡,然后单击Advanced ...

确保Debug Info设置为"full"(不是pdb-only)

调试你的项目 - 瞧!



5> 小智..:

以下对我有用,谢谢@Vin.

我在使用VS 2015时遇到了这个问题.我的解决方案:配置已选中(Debug).我通过取消选中Optimize Code项目属性下的属性来解决这个问题.

项目(右键单击)=>属性=>构建(选项卡)=>取消选中优化代码

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有