我在调试模式下使用Visual Studio 2010,并且未选中“优化代码”。我无法快速查看(或将鼠标悬停在调试器中)任何变量。我收到此错误“由于当前方法的代码已优化,无法评估表达式”。
即使是这样的行:int i = -3,对i进行快速监视,我也会得到“无法获取本地或参数'i'的值,因为该指令指针处不存在它,可能是因为它已经被优化了。”
在类似问题中引用的此链接似乎不适用。
有我缺少的设置吗?
我在调试模式下使用Visual Studio 2010,并且未选中“优化代码”。我无法快速查看(或将鼠标悬停在调试器中)任何变量。我收到此错误“由于当前方法的代码已优化,无法评估表达式”。
即使是这样的行:int i = -3,对i进行快速监视,我也会得到“无法获取本地或参数'i'的值,因为该指令指针处不存在它,可能是因为它已经被优化了。”
在类似问题中引用的此链接似乎不适用。
有我缺少的设置吗?
Answers:
当项目处于调试模式时,解决方案却没有。当我更改它时,它起作用了。
听起来好像您正在调试优化/发布版本,尽管未选中优化框。您可以尝试的操作有:
如果在“调试”->“ Windows”菜单中看不到“模块”菜单项,则可能需要在“自定义...”菜单中添加它。
Project.Web
优化未选中,但当我在Debug > Modules
:(
在VS2013中,转到:工具->选项->调试->常规,然后启用“使用托管兼容模式”。这将禁用新功能评估行为。
尝试以调试模式运行。如果以发布模式运行,则会收到此消息。
以上任何答案均未涵盖我的情况。我发现了以下内容:关于线程的MSDN文章,它解释说,当卡在某些原始的本机线程操作中时,调试器将无法访问数据。例如,当线程位于Task.Wait()上时,出现此错误。
除了提到的@Kragen,如果要调试Web项目
关闭Visual Studio,然后尝试删除C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files中的临时文件
您可能要做的另一件事是,创建一个与经过优化的dll具有相同名称但具有ini扩展名的文件,并向其中添加以下内容:
[.NET Framework调试控件]
GenerateTrackingInfo = 1
AllowOptimize = 0
这将告诉JIT不要优化您的变量。
请注意,您仍然需要pdb,因此最终将得到以下内容:yourDll.dll yourDll.pdb yourDll.ini
在您无权使用调试选项重新生成dll的情况下,此方法特别有效。
http://www.hanselman.com/blog/DebugVsReleaseTheBestOfBothWorlds.aspx
发出语句后,看到“ 由于当前方法的代码已优化,无法评估表达式。 ”消息,Debugger.Break()
请确保按F10键转到下一条语句。
一旦转到下一条语句,并假设您正在运行调试版本,此消息应消失。
从测试平台的Web应用程序调试类库时,我遇到了同样的问题。我在测试床上引用发行版,并且已在类库属性中对其进行了优化。
就在我撰写本文时,取消选中类库属性中发行版的“优化代码”复选框已解决了该问题。
我在Visual Studio和MonoDevelop之间到处都是F#项目时遇到了这个问题,可能是后者引起的(我忘了)。在VS中,未选中“优化”框,但是就调试器而言,优化似乎确实正在发生。
在将项目文件的XML与正常文件的XML进行比较之后,问题显而易见:正常项目具有明确的<optimize>false</optimize>
行,而不良项目则完全丢失了它。VS显然是从缺少它的情况中推断出优化被禁用,而编译器则相反。
解决方案是将此属性添加到项目文件中,然后重新加载。
迁移到Visual Studio 2017时,我开始收到此消息。此页面上尝试的所有想法都不适用于我。在另一篇文章中,我发现了这个建议,并且它可以正常工作-删除:
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
...从您的AssemblyInfo文件中。
在VS 2010中,我遇到了同样的问题。清理并重新生成解决方案,它可以正常工作。
上面vickramds的评论(参考http://torulflundgren.blogspot.com.au/2010/03/cannot-obtain-value-of-local-or.html)对我有用。我检查了所有内容-从本地bin文件夹中删除了所有dll,pdb文件,清理,重建,清除了临时ASP.NET文件的所有文件夹,确保设置了TRACE / DEBUG标志,检查了DLL路径等。
对于受影响的项目,请放下它以免丢失:
项目属性->构建->高级->调试信息:完整。
在执行此操作之前,您要检查是否已选择“调试”配置,当然,除非另有说明。
我混合了c ++ / cli mfc扩展dll,即使调试配置也已优化(可从VS 2017 Modules窗口查看)。如先前的答案建议,我更改了“在VS2013中,转到:工具->选项->调试->常规,并启用'使用托管兼容模式'。这将禁用新功能评估行为。” 在VS 2017中也可以找到该设置。
但这还不够,因此我还将UseDebugLibraries设置从另一个MFC应用程序的项目文件复制到了扩展dll项目文件。
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
...
<UseDebugLibraries>true</UseDebugLibraries>
然后重建并解决问题。