在 Visual Studio 2010 beta 2 中调试应用程序时,突然出现以下错误。
“无法评估表达式,因为
线程停止在某个点
垃圾收集是不可能的,
可能是因为代码是
优化”
监视窗口中的几乎每个属性或字段都会显示此消息。有谁知道发生了什么事吗?以及如何摆脱它?
项目属性构建选项卡上的“优化代码”复选框已关闭。
这里有一个link http://www.mail-archive.com/advanced-dotnet@discuss.develop.com/msg12883.html来讨论这个问题。显然,当函数参数是结构体时,调用该函数所需的堆栈总内存超过了 Visual Studio 调试器的一些神奇数字。
Quote
我认为所有对象的“引用”的总大小
struct 和方法上的附加参数大于 256
字节。
我从 MS 得到关于这个问题的回复:
“...一般来说,当参数的总大小传递给
被调用函数大于256字节,JIT将调用调用函数
部分可中断。在部分可中断的代码中,并非每个
代码中的位置是 GC 安全点。因此,可能不安全
评估某些位置的表达。当这种情况发生时,你会得到[
错误信息]。”
所以看来,即使这些字段是引用,所有它们的总和
超过256字节limit对于调试器。
我也有这个link http://www.opentk.com/node/1460来自 OpenTK 框架讨论。
Quote
我做了一些挖掘,看来问题源于数学数据结构(例如矩阵或向量)的类型为“struct”。
C# 对值类型有一个限制,即当作为参数传递给函数时,它们不应超过 256 字节的数据,除非它们通过引用传递。不遵守这一点会在调试模式下产生不间断的代码。如果将上述数据结构从结构体转换为类,问题就应该得到解决。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)