调试时无法查看变量值

我正在尝试调试我正在处理的当前应用程序的部分,但是当我尝试检查属性/变量的值时,我得到错误:

Cannot evaluate expression because a thread is stopped at a point where garbage collection is impossible, possibly because the code is optimized.

这只是一个常规的ASP.NET项目。 在应用程序的某些部分,我可以完美地查看属性和变量。 我还没有弄清楚我能够和不能看到变量值的代码块有什么不同。

问题记录在MSDN博客上,因为在某些情况下是某些类型的大小限制,链接中有更多细节。 我相信它是256字节和/或传递给函数的参数数量的总大小/数量。 很抱歉,似乎没有快速修复,但希望MSDN博客条目可以帮助您找到解决问题的方法。

本文“Funceval规则”给出了为什么会出现这种情况的一些原因。 如果打开调试并且已经关闭优化,那么您似乎没有太多关于此问题的事情。

你在发布版本吗? 尝试将配置更改为“debug”,看看它是否有所改进。

我们在两个WinForm用户控件中遇到了同样的问题。 在这两种情况下,用户控件都包含许多业务逻辑(分别为2000和3000行代码)并使用多个相当重的对象(它们具有30多个属性,这些属性在其中一个属性中第一次从数据库自动填充被访问)。 当您尝试单步执行(稍微复杂)validation和保存方法时,在尝试访问对象属性时会收到相同的消息。

我们得出的结论是,用户控件的大小和复杂性与所使用的对象的大小和复杂性以及条件数据库访问相结合,对于调试器来说只是变得太多了,我们应该只做一些重大的重构来移动大多数业务逻辑都脱离了用户控制。 有趣的是要知道你的问题是否来自同一种情况,以及做上述类型的重构是否确实有所作为(我们没有时间和/或勇气:)这样做)。