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 2017或2015中:

转到解决方案,右键单击解决方案,然后选择属性->选择所有配置->调试,然后单击确定。 在“重新构建并运行”之后,这个解决方案对我来说是有效的。

如果你在编译时启用了优化,那么许多变量将被删除;例如:

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

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

DoSomething(GetValue());

同样,如果一个返回值根本没有被使用,那么它将通过“pop”被删除(而不是通过“stloc”存储在本地,并且再次;本地将不存在)。

正因为如此,在这样的构建中,调试器无法获得value的当前值,因为它不存在——它只存在于GetValue()和DoSomething(…)之间的短暂瞬间。

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

检查您的AssemblyInfo文件中是否有Debuggable属性。如果存在,则删除它并重新构建解决方案,以查看本地变量是否可用。

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

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