“使用 Visual Studio 调试 lambda 表达式”不再起作用?
Posted
技术标签:
【中文标题】“使用 Visual Studio 调试 lambda 表达式”不再起作用?【英文标题】:"Debugging lambda expressions with Visual Studio" no longer working? 【发布时间】:2019-09-07 13:59:49 【问题描述】:在 Visual Studio 2015 中,引入了对调试 lambda 表达式的支持:https://devblogs.microsoft.com/devops/support-for-debugging-lambda-expressions-with-visual-studio-2015/
但是,我一直无法让它在 Visual Studio 2017 中运行,也无法在新的 Visual Studio 2019 中运行。
在 2019 年,我得到:“错误:在此上下文中不支持在 System.Reflection.PropertyInfo 类型的调试对象中检查对象的状态”。
此功能是否已被删除?
示例:我正在使用包含IQueryable
的变量“tags”调试代码。我想检查每个项目的Name
属性,所以在即时窗口或监视窗口中我写:tags.Select(t => t.Name)
。然后报错。
【问题讨论】:
你能添加一个简单的例子吗? @stuart:为了您的快乐而添加。 请显示一些数据 @Protectorone 如果您尝试使用IEnumerable
而不是IQueryable
,它会起作用吗?
@AderbalFarias:有趣!它确实适用于原生 IEnumerable
!不过,它不适用于 IQueryable AsEnumerable()
,但它适用于 ToArray
!
【参考方案1】:
这更像是一个没有背景的临时答案,直到有知识的人出现。
如果你在IQueryable
上调用ToArray
,你可以使用 lambdas 对其进行调试。但它不适用于AsEnumerable
结果,因此它似乎不仅仅是使用IEnumerable
方法与IQueryable
方法。
【讨论】:
【参考方案2】:作为替代方法,您可以使用即时窗口来探索价值。考虑这里的简单代码:
static void Main(string[] args)
int[] Numbers = 10, 20, 30, 40 ;
var NewNumbers = Numbers.Select(x => x * x);
在您的 lambda 表达式所在的位置放置一个调试点,然后打开 Debug -> Window -> Immediate。
在立即窗口中,您可以编写要测试的表达式并查看结果。我输入了:
Numbers.Select(x => x*x)
按回车,你会看到结果为:
Count = 4
[0]: 100
[1]: 400
[2]: 900
[3]: 1600
即时窗口是检查变量、运行表达式并有助于加快调试速度的游乐场。
【讨论】:
【参考方案3】:这显然是由于微软引入的新调试引擎中缺少一个功能造成的。按照this link 的指示,我开始工作了。说明归结为:
-
从“工具”菜单打开“选项”。
在左侧选择“调试”、“常规”。
一直向下滚动以选中“使用
托管兼容模式”。
【讨论】:
我也读过这个,但这是大约 2013 年!我希望 2015 的功能在 2019 中工作! 2019年没有“使用托管兼容模式”这样的选项以上是关于“使用 Visual Studio 调试 lambda 表达式”不再起作用?的主要内容,如果未能解决你的问题,请参考以下文章