“使用 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 表达式”不再起作用?的主要内容,如果未能解决你的问题,请参考以下文章