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.
当前回答
如果你在编译时启用了优化,那么许多变量将被删除;例如:
SomeType value = GetValue();
DoSomething(value);
在这里,局部变量值通常会被删除,而是保留在堆栈上的值-有点像你写的:
DoSomething(GetValue());
同样,如果一个返回值根本没有被使用,那么它将通过“pop”被删除(而不是通过“stloc”存储在本地,并且再次;本地将不存在)。
正因为如此,在这样的构建中,调试器无法获得value的当前值,因为它不存在——它只存在于GetValue()和DoSomething(…)之间的短暂瞬间。
所以;如果你想调试…不要使用发布版本!或者至少在调试时禁用优化。
其他回答
在visual Studio 2017中 去调试->选项,然后检查调试->通用-> 选中这个选项
如果你在编译时启用了优化,那么许多变量将被删除;例如:
SomeType value = GetValue();
DoSomething(value);
在这里,局部变量值通常会被删除,而是保留在堆栈上的值-有点像你写的:
DoSomething(GetValue());
同样,如果一个返回值根本没有被使用,那么它将通过“pop”被删除(而不是通过“stloc”存储在本地,并且再次;本地将不存在)。
正因为如此,在这样的构建中,调试器无法获得value的当前值,因为它不存在——它只存在于GetValue()和DoSomething(…)之间的短暂瞬间。
所以;如果你想调试…不要使用发布版本!或者至少在调试时禁用优化。
在Visual Studio 2012中:
打开项目属性->调试->取消选中“启用Visual Studio托管进程”
对于web应用程序,还有一个重要的问题,那就是在应用程序发布过程中选择正确的配置。
你可以在调试模式下构建你的应用,但它可能发生在你以发布模式发布它,默认情况下优化代码,但IDE可能会误导你,因为它显示调试模式,而发布的代码是在发布模式。 你可以在下面的快照中看到详细信息:
当我面临同样的问题时,我只需要在重建之前清理我的解决方案。这帮我解决了问题。