无法获取本地或参数的值,因为它在此指令指针处不可用,可能是因为它已经被优化掉了

cur*_*ity 194 c# debugging visual-studio-2010

Visual Studio 2010在不安全块中的某个函数参数中杀死(没有其他单词)数据.什么可能导致此错误?调试器显示以下消息.

Cannot obtain value of local or argument as it is not available at this instruction pointer, possibly because it has been optimized away.
Run Code Online (Sandbox Code Playgroud)

Kar*_*hik 302

转到项目属性,然后在构建下确保未选中"优化代码"复选框.

另外,在"高级选项"("构建"选项卡下)中将"调试信息"下拉列表设置为"完整".

  • 首先,检查Build Configuration是否为Debug,而不是Release. (104认同)
  • 顺便说一句,如果你想在Release模式下测试它,你可以添加“Debugger.Launch();” 在代码中 (3认同)

小智 120

也在VS 2015社区版中

转到Debug-> Options或Tools-> Options

并检查Debugging-> General->抑制模块加载时的JIT优化(仅限管理)

  • 在应用了上述所有解决方案后,这解决了我的问题. (7认同)
  • 这也适用于VS 2017社区版 (3认同)
  • 没有一个建议的答案对我有用。我的变量仍然被优化掉...... (2认同)

Mar*_*ell 58

如果在启用优化的情况下进行编译,那么将删除许多变量; 例如:

SomeType value = GetValue();
DoSomething(value);
Run Code Online (Sandbox Code Playgroud)

这里局部变量value通常会被删除,而不是将值保留在堆栈上 - 有点像你写的那样:

DoSomething(GetValue());
Run Code Online (Sandbox Code Playgroud)

此外,如果根本没有使用返回值,那么它将通过"pop"被丢弃(而不是通过"stloc"存储在本地,并且再次;本地将不存在).

因此,在这样的构建中,调试器无法获取当前值,value因为它不存在 - 它仅存在于GetValue()和之间的短暂时刻DoSomething(...).

所以; 如果你想调试...不要使用发布版本!或者至少在调试时禁用优化.

  • 谢谢你的答案 - 但是我检查了项目中的优化代码属性并且未选中=( (4认同)
  • @Marc - 我理解你在说什么,但是,我正在使用微软的参考源库来编写自己的垃圾代码.我现在正在研究方法,但我似乎无法看到任何当地人的价值观.那么调试.Net源的重点是什么?有什么建议?http://stackoverflow.com/questions/13147132/active-directory-group-membership-checking-in-net-4-5 (4认同)

Dul*_*tri 22

http://www.guntucomputerhacks.blogspot.com.au/2014/07/cannot-obtain-value-of-local-or.html

这在2013年的visual studio中对我有用.

你所要做的就是......

  1. 用鼠标右键单击无法调试的项目.
  2. 去项目礼仪.
  3. 单击构建菜单.
  4. 单击高级按钮.
  5. 将调试信息下拉值设置为完整.
  6. 重建您的项目.


Jab*_*ler 20

我刚碰到这个,我在Release构建配置而不是Debug构建配置下运行.一旦我Debug再次切换回手表中显示的变量.


VSB*_*VSB 12

对于 Web 应用程序来说,还有一个很重要的问题,那就是在应用程序发布过程中选择正确的配置。

您可以在调试模式下构建应用程序,但可能会在发布模式下发布它,默认情况下会优化代码,但 IDE 可能会误导您,因为它显示调试模式,而发布的代码处于发布模式。您可以在下面的快照中查看详细信息: 在此输入图像描述


小智 9

在visual Studio 2017中转到调试->选项,然后检查调试->常规->并选中此选项

相关的Visual Studio 2017选项

  • 这是 2015 年上述一个答案的重复答案:/sf/answers/2407011281/ (3认同)

CJe*_*CJe 7

当我遇到同样的问题时,我只需要在重建之前清理我的解决方案.这照顾了我.


Mil*_*loš 6

关于"优化代码"属性是UNCHECKED的问题,但代码仍然编译为优化:在尝试所有内容后最终帮助我的是在同一设置页面上检查"启用非托管代码调试"复选框(项目属性 - 调试).它与代码优化没有直接关系,但启用此功能后,VS不再优化我的库,我可以调试.

  • 在 VS 2015 中,我在项目构建、Web、调试器中检查了启用“本机代码”,一切正常。 (2认同)

小智 6

就我而言,我正在处理一个 web api 项目,尽管该项目已正确设置为完全调试,但每次我尝试调试附加到 IIS 进程时,我仍然看到此错误。然后我意识到发布配置文件被设置为使用发布配置。因此,如果您使用的是 dotnet web api 项目的“发布”功能,那么还有一个需要检查的地方是您的发布配置文件。


Hoa*_*ran 5

我所面临的同样的问题,我的解决办法是改变Solution ConfigurationReleaseDebug.希望能帮助到你