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(…)之间的短暂瞬间。

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

其他回答

我也遇到过同样的问题,我的解决方案是将解决方案配置从发布更改为调试。希望能有所帮助

当我面临同样的问题时,我只需要在重建之前清理我的解决方案。这帮我解决了问题。

关于“优化代码”属性未选中的问题,但代码仍然编译为优化:在尝试了所有东西后,最后帮助我的是在同一设置页面上检查“启用非托管代码调试”复选框(项目属性-调试)。它与代码优化没有直接关系,但是启用这个功能后,VS不再优化我的库,我可以调试。

转到“项目属性”,在“构建”下确保“优化代码”复选框未选中。

此外,在高级选项(在构建选项卡下)中将“调试信息”下拉菜单设置为“完全”。

在Visual Studio 2012中:

打开项目属性->调试->取消选中“启用Visual Studio托管进程”