Debugging 禁用托管兼容模式的具体用途是什么

Debugging 禁用托管兼容模式的具体用途是什么,debugging,visual-studio-2017,Debugging,Visual Studio 2017,所以我一直在努力解决VisualStudio调试器在大型实体框架查询上超时的问题。基本上,有时在实体框架linq查询上,它会给我这个错误 评估功能 'System.Data.Entity.Infrastructure.DbQuery.ToString' 需要以不安全的方式中止。这可能已经腐化了 目标进程 如果问题经常发生,考虑禁用 工具->选项设置“调试->常规->启用属性评估” 和其他隐式函数调用”或将代码更改为禁用 对该方法的评价。有关执行此操作的信息,请参阅“帮助” 一旦出现错误,我需要重

所以我一直在努力解决VisualStudio调试器在大型实体框架查询上超时的问题。基本上,有时在实体框架linq查询上,它会给我这个错误

评估功能 'System.Data.Entity.Infrastructure.DbQuery.ToString' 需要以不安全的方式中止。这可能已经腐化了 目标进程

如果问题经常发生,考虑禁用 工具->选项设置“调试->常规->启用属性评估” 和其他隐式函数调用”或将代码更改为禁用 对该方法的评价。有关执行此操作的信息,请参阅“帮助”

一旦出现错误,我需要重新启动调试器来修复它。经过一番研究和吹毛求疵之后,我发现了一个启用“使用托管兼容性模式”的建议。令人惊讶的是,这起作用了,我还注意到,我可以逐步完成代码的速度有了显著提高

文档中说这是一个遗留调试器,启用它可能会禁用某些调试功能


那么,功能的具体区别是什么?为什么使用“托管兼容性模式”可以大大提高步进速度?

据我所知,这是VS2013的一个新选项

在旧的VS版本中,C#和VB项目无法关闭托管调试

选项“托管兼容性模式”用于托管和混合调试,但不用于纯本机调试

您可以从Hans Passant的建议中获得更详细的信息:


自从新的托管调试引擎在VS2013中变得不稳定以来,我一直在发布此建议。不幸的是,微软不想正确地记录它,所以很难得到可靠的建议。该选项所做的是重新启用VS2010中使用的调试引擎。好的。您将错过的是自2012年以来添加的新调试功能。方法返回值检查和64位编辑+继续。UWP和.NETCore项目不确定。我唯一能保证的是,每个人都会对这些建议感到欣喜若狂,而调试程序的bug会很严重。谢谢,这增加了更多的洞察力。有趣的是,新的内联属性评估仍然有效。它不能直接绑定到调试器。我没有注意到我经常使用的东西丢失了。不过,当我们转向.net内核时,这听起来可能是一个更大的问题。@Ryan B,我同意Hans Passant的建议,该选项强制加载托管调试器的旧版本。根据Hans Passant的建议,添加评论作为答案。希望它能帮助其他容易遇到同样问题的社区成员。