在Visual Studio 2010中,“由于当前方法的代码已经优化,因此无法评估expression式”
我在debugging模式下使用Visual Studio 2010,我有“优化代码”未选中。 我不能在debugging器中快速观察(或hover)任何variables。 我得到这个错误“无法评估expression式,因为当前方法的代码被优化”。
即使是这样一行:int i = -3,快速监视我,我得到“无法获得本地值或参数'我',因为它不可用在这个指令指针,可能是因为它已经被优化了。
这个在类似问题中引用的链接似乎不适用。
有没有我失踪的设置?
当项目处于debugging模式时,解决scheme不是。 当我改变它,它的工作。
我在使用VS 2010时遇到了这个问题。我的解决schemeconfigurationselect了(debugging)。 我通过取消select项目属性下的优化代码属性来解决这个问题。 项目(右键单击)=>属性=>构build(选项卡)=>取消选中优化代码
这听起来像你正在debugging一个优化/发布版本,尽pipe优化的盒子未经检查。 你可以尝试的事情是:
- 做一个完整的解决scheme文件重build(右键点击解决scheme,然后select重build全部)
- 在debugging打开模块窗口(debugging – > Windows – >模块),并在加载的模块列表中find您的程序集。 检查你所装载的程序集列出的path是否与你期望的一致,并且修改后的文件时间戳表明程序集实际上是重build的。
- 模块窗口也应该告诉你加载的模块是否被优化 – 确保模块窗口指示它没有被优化。
如果您在Debug – > Windows菜单中看不到Modules菜单项,则可能需要将其添加到“Customize …”菜单中。
在VS2013中,进入:工具 – >选项 – >debugging – >常规,并启用'使用托pipe兼容模式'。 这将禁用新function评估行为。
尝试以debugging模式运行。如果您在发布模式下运行,您将收到此消息。
除了@Kragen提到的,如果你正在debugging一个web项目
closuresVisual Studio并尝试删除C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files中的临时文件
我在VS2008有同样的问题。 在我的情况下,它是通过解决scheme重build解决的。
我的情况并没有被上面的答案所覆盖。 我发现了以下内容:关于线程的MSDN文章解释说,当停留在一些原始的本地线程操作时,debugging器不能访问数据。 作为一个例子,当一个线程坐在Task.Wait()上时,就会出现这个问题。
关于“优化代码”属性被UNCHECKED的问题,但仍然编译为优化的代码:什么最终帮助我试了一切后,检查“启用非托pipe代码debugging”checkbox在同一设置页面(项目属性 – debugging)。 它没有直接关系到代码优化,但是启用了这个,VS不再优化我的库,我可以debugging。
从testing床Web应用程序debugging类库时遇到同样的问题。 我在testing平台中引用了发行版本,并将其设置为在类库属性中进行了优化。
在我编写它的时候,取消勾选类库属性中的发行版的优化代码checkbox已经解决了这个问题。
我意识到这是一个稍后的答案,但我发现另一个解决这个问题的方法,可能会帮助其他人在未来。 这个网页描述了设置一个阻止优化的环境variables(COMPLUS_ZapDisable = 1),至less它为我做了! (不要忘记禁用Visual Studio托pipe过程的第二部分。)在我的情况下,这可能是更相关的,因为我通过符号服务器debugging外部DLL,但我不知道。
我有同样的问题。 但在我的情况下,Debuggable属性被硬编码在我的项目的AssemblyInfo.cs文件中,因此没有(over-)编译。 它删除了指定Debuggable属性的行后工作。
我遇到了一个在Visual Studio和MonoDevelop之间一直存在的F#项目的问题,也许源于后者(我忘记了)。 在VS中,优化框没有被选中,但是就debugging器而言,优化肯定是出现了。
将项目文件的XML与健康项目的XML进行比较后,问题是显而易见的:健康的项目具有明确的<optimize>false</optimize>
行,而坏的项目完全没有。 VS显然是从缺席推断,优化被禁用,而编译器是相反的。
解决scheme是将此属性添加到项目文件,然后重新加载。
在发出Debugger.Break()
语句之后,如果看到“ 无法评估expression式,因为当前方法的代码已经优化 ”消息,请确保按F10进入下一个语句。
一旦进入下一个语句,并假设您正在运行一个debugging版本,这个消息应该消失。
你可以做的另一件事是,创build一个与优化,但与INI扩展名相同的名称的文件,并添加以下内容:
[.NET Frameworkdebugging控件]
GenerateTrackingInfo = 1
AllowOptimize = 0
这将告诉JIT不要优化你的variables。
请注意,您仍然需要pdb,所以您最终会得到如下所示的结果:yourDll.dll yourDll.pdb yourDll.ini
当您无法访问使用debugging选项重新生成dll时,这种情况特别适用。
http://www.hanselman.com/blog/DebugVsReleaseTheBestOfBothWorlds.aspx
我在2010年有同样的问题。清理和重build解决scheme,它的工作。
上面vickramds的评论,指的是http://torulflundgren.blogspot.com.au/2010/03/cannot-obtain-value-of-local-or.html ,为我做了。 我检查了一切 – 从本地bin文件夹中删除所有dll,pdb文件,清理,重build,清除临时ASP.NET文件的所有文件夹,确保设置TRACE / DEBUG标志,检查DLLpath等。
要把它放下来,所以它不会丢失,对于受影响的项目:
项目属性 – >生成 – >高级 – >debugging信息:完整。
在执行此操作之前,您需要检查是否已经select了Debugconfiguration,除非另有说明。
如果您正在尝试debuggingASP.NET项目,请确保将项目的“属性”>“Web”>“服务器”下拉列表设置为“IIS Express”(除了检查此处的所有内容外)。
确保您处于debugging模式。
从解决scheme资源pipe理器
1 – 右键单击您的项目
2 – 属性
3 – 点击Build
4 – 取消选中优化代码。
当我迁移到Visual Studio 2017时,我开始收到这条消息。我试过的这个页面上的任何想法都不适合我。 在另一篇文章中,我发现这个build议,它的工作 – 删除:
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
从你的AssemblyInfo文件中。