Est*_*aya 46 .net c# compiler-construction debugging optimization
我写了一些带有大量递归的代码,需要花费很多时间才能完成.每当我"暂停"运行以查看我得到的结果:
无法计算表达式,因为当前方法的代码已经过优化.
我想我明白这意味着什么.然而,让我感到困惑的是,在我点击步骤之后,代码不再"优化"了,我可以查看我的变量.这是怎么发生的?代码如何在优化代码和非优化代码之间来回切换?
No *_*one 44
虽然Debug.Break()行位于callstack之上,但您无法eval表达式.那是因为该线路已经过优化.按F10移动到下一行 - 一行有效的代码 - 手表将起作用.
Lam*_*mar 27
您可能尝试在发布模式而不是调试模式下调试应用程序,或者在编译设置中打开了优化.
当使用优化编译代码时,某些变量一旦在函数中不再使用就会被丢弃,这就是您获取该消息的原因.在禁用优化的调试模式下,您不应该收到该错误.
Nes*_*cio 27
调试器使用FuncEval来"查看"变量.FuncEval要求在GarbageCollector安全点的托管代码中停止线程.手动"暂停"IDE中的运行会导致所有线程尽快停止.您的高递归代码将倾向于停在不安全的位置.因此,调试器无法计算表达式.
按F10将移至下一个Funceval Safe点并启用功能评估.
这让我发疯了.我尝试使用Managed和Native代码附加 - 没有去.
这对我有用,我终于能够评估所有表达式:
小智 7
以下对我有用,谢谢@Vin.
我在使用VS 2015时遇到了这个问题.我的解决方案:配置已选中(Debug).我通过取消选中Optimize Code项目属性下的属性来解决这个问题.
项目(右键单击)=>属性=>构建(选项卡)=>取消选中优化代码