问题描述
|
这是错误
无法评估表达式,因为线程在无法进行垃圾回收的点停止,这可能是因为代码已优化。
我正在编写一个简单的控制台应用程序,第一行代码是这样的:
List<MyObjectModel> list = MyObjectModel.GetNonCompletedReturns();
该函数的代码为:
public static List<MyObjectModel> GetNonCompletedReturns()
{
MyObject service = new MyObject();
List<MyObject> entities =
(from recs in service.Retrieve() where select recs).ToList();
List<MyObjectModel> models = new List<MyObjectModel>();
foreach (MyObject entity in entities)
{
models.Add(BindModel(entity));
}
return models;
}
如果我尝试单步执行代码,则一旦回到应用程序的主目录并将鼠标悬停在列表上,就会收到显示的错误消息。
有人可以帮忙吗?
解决方法
仅当您在调试期间尝试使用
Watch
对话框时,才会触发此错误。
尝试使用其他技术来输出变量,例如Debug.WriteLine
,Console.WriteLine
等。
, 如果您的项目是在发行版中编译的(启用了优化功能),则可能会看到此情况。您是否尝试过DEBUG配置?
, 没有任何答案可以解决我的问题,因此我发布了对我有帮助的解决方案。
\“如果参数中的数据太多,则可能会发生此错误,
一个简单的解决方案是制作一个对象,而不是一个结构,因为那是一个数据对象。
将此对象而不是所有其他变量都放在参数中,
通常问题将不再发生。”
, 如果您的Visual Studio解决方案配置为Release
,请切换到Debug
。
, 这是一个小技巧,以防万一您想检查一些对象而又无法更改参数:
我已经在无法观看对象的函数内部创建了对新临时函数的调用。然后,在该新功能中,我可以观察我的对象。作业完成后,只需删除功能即可。
, 的确,在发布模式下,出现“由于线程在无法进行垃圾回收的点停止,可能是因为代码已优化”而导致的“无法求值表达式”错误,大多数开发人员只是确保他们的项目是配置为编译为调试版本。但是,要确保没有发行DLL问题,还必须检查解决方案中对DLL的引用,并确保您没有对发行版DLL的引用。如果发现是这种情况,请删除DLL引用,然后添加项目引用而不是DLL引用。项目参考将确保您的解决方案参考构建配置中指定的DLL的调试或发行版本。
请注意,以上建议当然仅适用于您拥有源代码并且是从解决方案中的项目生成的那些DLL。
, 当我从第三方控制中获得7英镑时,我也明白了。
在这种情况下,我发现如果在遇到异常之前设置断点,则可以单步执行其余代码,而不会发现问题。
不知道为什么,但这对我有用-至少在这种情况下。
, 就其价值而言,此错误也可能是由于属性getter中的无限循环(以下为简化版本)引起的。当调试器尝试评估属性时(例如,在监视窗口中),UI会挂起几秒钟,并且同一类中的许多其他属性都会出现“无法评估表达式...”错误。
public int MyProperty
{
get
{
while (true) { }
return 0;
}
}
, 首先,请确保您以DEBUG模式运行代码,并且关闭了代码优化功能。您可以从项目的属性中将其关闭。
如果您完成上述所有操作,并且问题仍然存在,则可能是栈顶有Debug.Break()
的问题。解决这个问题的方法非常简单,只需按to10ѭ移到下一行,就可以计算表达式了。
您可以检查此SO问题以获取有关此问题的更多信息。
, 在评估linq表达式时,我在Visual Studio调试器中遇到了相同的错误消息。
禁用VS调试器配置设置\'启用仅我的代码\'为我解决了此问题:
要启用或禁用“仅我的代码”,请在
视觉工作室。在“调试”>“常规”节点中,选择或清除“启用”
只是我的代码。
https://docs.microsoft.com/zh-cn/visualstudio/debugger/just-my-code
, 我在Visual Studio 2017中遇到相同的问题。转到“调试”>“选项”>“调试”>“常规”并检查“抑制模块负载上的JIT优化(仅受管理)”可以解决我的问题