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.
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.
Answers:
转到“项目属性”,然后在“生成”下,确保未选中“优化代码”复选框。
此外,在“高级选项”(“内部”选项卡)中,将“调试信息”下拉列表设置为“完整”。
也在VS 2015 Community Edition中
转到调试->选项或工具->选项
并检查Debugging-> General-> Suppress JIT Optimization on module load(仅受管理)
如果在启用优化的情况下进行编译,则将删除许多变量。例如:
SomeType value = GetValue();
DoSomething(value);
在这里,value
通常会删除局部变量,而是将值保留在堆栈上-有点像您编写的那样:
DoSomething(GetValue());
另外,如果有返回值 根本没有使用,则将通过“ pop”将其删除(而不是通过“ stloc”存储在本地中,并且再次;本地将不存在)。
因此,在这样的构建中,调试器无法获得的当前值,value
因为它不存在 -它仅存在于GetValue()
和DoSomething(...)
。
所以; 如果要调试...请不要使用发行版!或至少在调试时禁用优化。
http://www.guntucomputerhacks.blogspot.com.au/2014/07/cannot-obtain-value-of-local-or.html
这在Visual Studio 2013中为我工作。
您所要做的就是..
我只是遇到了这个问题,而我是在Release
构建配置而不是Debug
构建配置下运行的。一旦切换回Debug
我的变量,手表中将再次显示该变量。
关于“优化代码”属性处于未选中状态,但代码仍处于优化状态的问题:尝试一切后,最终帮助我的是在同一设置页面上选中“启用非托管代码调试”复选框(项目属性-调试)。它与代码优化没有直接关系,但是启用此功能后,VS将不再优化我的库并且可以调试。
Enable unmanaged code debugging
。有Enable native code debugging
,我尝试检查此内容,但没有区别。
对于在调试Azure网站的Web应用程序时遇到此问题的人员的其他答案:
例如,从GitHub部署时,代码在优化的 Azure服务器中编译默认情况下。
我通过设置告诉服务器以可调试的方式进行编译 SCM_BUILD_ARGS
为/p:Configuration=Debug
但还有更多选择。看到这个: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属性。如果有,请将其删除并重新生成解决方案,以查看局部变量是否可用。
我的debuggable属性设置为:DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints,根据MSDN的这篇文章,它告诉JIT编译器使用优化。我从AssemblyInfo.cs文件中删除了这一行,并且本地变量可用。
我遇到过同样的问题。经过以上所有尝试,发现我还必须为项目删除{PROJECT_ROOT} \ bin \ Release \ netcoreapp2.2和{PROJECT_ROOT} \ obj \ Release \ netcoreapp2.2内的所有内容。它绝对与发布有关,因为尽管我在Azure Web App上使用了部署工具/ bitbucket,但我还是尝试尝试将Build >> Publish >> Publish to publish to Azure,因为我想检查实际部署了哪些文件。
WPF应用程序之前曾遇到过相同的问题,并且此处的所有解决方案都无法解决该问题。问题是,该模块已经优化,所以下面的解决方案DO NOT WORKS(或者是不足以解决问题的):
要解决此问题,您必须删除优化的模块。要找到优化的模块路径,可以使用Process Hacker之类的工具。
在“ 过程面板 ”中双击您的程序,然后在新窗口中打开“ .NET程序集 ” 选项卡。然后在“本机映像路径 ” 列中找到所有“ 优化模块”路径。找到您要取消优化的文件夹并删除该文件夹(请参见下面的屏幕截图): 出于明显的原因,我模糊了公司名称)
重新启动您的应用程序(正确选中步骤1中的复选框),它应该可以工作。
注意:文件可能已被其他进程打开,因此可能被锁定,请尝试关闭Visual Studio。如果文件仍被锁定,则可以使用诸如Lock Hunter之类的程序
Cannot obtain value of local or argument '<this>' as it is not available at this instruction pointer, possibly because it has been optimized away. System.Threading.Tasks.TaskExceptionHolder