"无法评估表达式......"错误

Sor*_*oot 2 visual-studio-2010

在Visual Studio 2010 beta 2中调试应用程序时,我突然遇到以下错误.

"无法评估表达式,因为线程在无法收集垃圾的位置停止,可能是因为代码已经优化"

监视窗口中的几乎每个属性或字段都显示此消息.有谁知道发生了什么?以及如何摆脱它?

项目属性构建选项卡上的"优化代码"复选框已关闭.

ja7*_*a72 6

以下是此问题讨论的链接.显然,当函数参数是结构体时,堆栈上调用函数所需的总内存超过了一些神奇的数字视觉工作室调试器.

引用

我认为结构中所有对象的"引用"的总和大小以及方法上的附加参数大于256个字节.

我在这个问题上得到了MS的回复:

"...一般来说,当传递给被调用函数的参数的总大小大于256字节时,JIT将使调用函数部分可中断.在部分可中断的代码中,并非代码中的每个位置都是GC安全的因此,在某些位置评估表达式可能是不安全的.当发生这种情况时,你得到[错误信息]."

所以看起来即使字段是引用,它们的总和也超过了调试器的256字节限制.

我也有来自OpenTK框架讨论的这个链接.

引用

我做了一些挖掘,看起来问题源于数学数据结构(如Matrix或Vector)类型为"struct"的事实.C#对值类型有一个限制,即当作为函数的参数传递时,它们不应超过256字节的数据, 除非它们通过引用传递.不符合要求会在调试模式下产生不间断的代码.如果将上述数据结构从结构转换为类,则应解决该问题.