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

Visual Studio 2010在不安全块中的一个函数参数中杀死(没有别的词)数据。 什么可能导致这个错误? debugging器显示以下消息。

Cannot obtain value of local or argument as it is not available at this instruction pointer, possibly because it has been optimized away. 

转到项目属性,并在生成下确保“优化代码”checkbox未选中。

另外,在“高级选项”(“生成”选项卡下)中,将“debugging信息”下拉菜单设置为“完整”。

如果在启用优化的情况下进行编译,则会删除多个variables; 例如:

 SomeType value = GetValue(); DoSomething(value); 

在这里局部variables的value通常会被删除,而不是保留在栈上的值 – 有点像你写的:

 DoSomething(GetValue()); 

另外,如果完全没有使用返回值,那么它将通过“pop”(而不是存储在本地通过“stloc”,再次;本地将不存在)下降。

因此,在这样的构build中,debugging器不能获取当前值的value因为它不存在 – 它只存在于GetValue()DoSomething(...)之间的短时间内。

所以; 如果你想debugging…不要使用发布版本! 或者至less在debugging时禁用优化。

也在VS 2015社区版

去debugging – >选项或工具 – >选项

并检查debugging – >常规 – >取消模块负载上的JIT优化(仅限pipe理)

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

这在Visual Studio 2013中适用于我。

你所要做的就是..

  1. 用鼠标右键单击不能debugging的项目。
  2. 去项目的礼仪。
  3. 点击生成菜单。
  4. 点击高级button。
  5. 将debugging信息下拉值设置为完整。
  6. 重build你的项目。

我刚刚碰到这个,我正在运行Release版本configuration而不是Debug版本configuration。 一旦我切换回Debug我的variables再次显示在手表。

关于“优化代码”属性被UNCHECKED的问题,但仍然编译为优化的代码:什么最终帮助我试了一切后,检查“启用非托pipe代码debugging”checkbox在相同的设置页面(项目属性 – debugging)。 它没有直接关系到代码优化,但是启用了这个,VS不再优化我的库,我可以debugging。

当我遇到同样的问题时,我只好在重build之前清理我的解决scheme。 这照顾了我。

我发现我在运行项目和通过附加到IIS进程进行debugging时遇到了同样的问题。 我也在debugging模式下运行,closures优化。 虽然我认为代码编译好,当我分离并试图编译时,其中一个引用没有find。 这是由于另一位开发人员在这里做了修改并改变了参考的位置。 这个参考文件没有显示警报符号,所以我认为一切都很好,直到我编译完成。 一旦修复参考和再次运行它的工作。

作为debuggingAzure网站的Web应用程序时遇到此问题的附加答案:

例如,从GitHub进行部署时,代码将在默认优化的Azure服务器中编译。

我通过将SCM_BUILD_ARGS设置为/p:Configuration=Debug来告诉服务器以可debugging的方式进行编译

但有更多的select。 看到这个: http : //azure.microsoft.com/blog/2014/05/08/introduction-to-remote-debugging-on-azure-web-sites-part-3-multi-instance-environment-and-git /

检查您的AssemblyInfo文件中是否有Debuggable属性。 如果有,请将其删除并重build您的解决scheme,以查看本地variables是否可用。

我的debuggable属性被设置为:DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints根据这个MSDN文章告诉JIT编译器使用优化。 我从我的AssemblyInfo.cs文件中删除了这一行,本地variables是可用的。

在Visual Studio 2012中:

转到项目属性 – >debugging – >取消选中“启用Visual Studio托pipe过程”

在我的情况下,我正在开发一个web api项目,虽然项目被正确设置为完全debugging,但是我每次连接到正在尝试debugging的IIS进程时仍然看到这个错误。 然后我意识到发布configuration文件被设置为使用发布configuration。 因此,如果您正在使用dotnet web api项目的“发布”function,另外需要检查的是您的发布configuration文件。

我面临同样的问题,对我来说, Solution ConfigurationReleaseDebug 。 希望能帮助到你