代码之家  ›  专栏  ›  技术社区  ›  Sorskoot

“无法计算表达式…”错误

  •  2
  • Sorskoot  · 技术社区  · 15 年前

    在Visual Studio 2010 Beta 2中调试应用程序时突然出现以下错误。

    “无法计算表达式,因为 线程停止在 垃圾收集是不可能的, 可能是因为代码是 “优化”

    “监视”窗口中的几乎每个属性或字段都会显示此消息。有人知道发生了什么事吗?如何摆脱它?

    关闭“项目属性生成”选项卡上的“优化代码”复选框。

    3 回复  |  直到 10 年前
        1
  •  6
  •   nalply Gagan    12 年前

    这里是一个 link 讨论这个问题。显然,当函数参数是结构时,堆栈上调用函数所需的总内存超过了Visual Studio调试器的一些神奇数字。

    引用

    我认为所有对象的“引用”的总大小 结构和方法上的其他参数大于256 字节。

    我得到了微软关于这个问题的回复:

    “…一般来说,当参数的总大小传递给 被调用函数大于256字节,JIT将使调用函数 部分可中断。在部分可中断的代码中,不是每个 代码中的位置是GC安全点。因此,它可能是不安全的 在特定位置计算表达式。当这种情况发生时,你会 错误消息]。”

    因此,即使字段是引用,所有字段的总和 超过256字节 限制 对于调试器。

    我也有这个 link 来自OpenTK框架讨论。

    引用

    我做了一些挖掘,发现问题的根源在于数学数据结构(如矩阵或向量)的类型是“结构”。 C对值类型有一个限制,即当作为参数传递给函数时,它们不应超过256字节的数据, 除非它们是通过引用传递的 .不符合该要求会在调试模式下生成不可中断的代码。 如果将公式化的数据结构从结构转换为类,则应该解决这个问题。

        2
  •  0
  •   Sorskoot    15 年前

    几天后,我注意到错误消失了,不知道是什么导致了错误,也不知道是什么解决了错误。

        3
  •  0
  •   Tom Bushell    12 年前

    当我从第三方控件中点击NullReferenceException时,我也得到了这个。

    在这个例子中,我发现如果我设置一个断点 之前 我遇到了异常,然后我可以单步执行其余的代码,而不会看到问题。

    不知道为什么,但这对我有效——至少在这个案例中。

    另外,正如@ja72所提到的,我没有对结构做任何操作。所以这个错误似乎也可以在其他情况下发生。