【问题标题】:"Debugging lambda expressions with Visual Studio" no longer working?“使用 Visual Studio 调试 lambda 表达式”不再起作用?
【发布时间】: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

标签: c# .net visual-studio visual-studio-2015 visual-studio-2019


【解决方案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 的指示,我开始工作了。说明归结为:

      1. 从“工具”菜单打开“选项”。
      2. 在左侧选择“调试”、“常规”。
      3. 一直向下滚动以选中“使用 托管兼容模式”。

      【讨论】:

      • 我也读过这个,但这是大约 2013 年!我希望 2015 的功能在 2019 中工作!
      • 2019年没有“使用托管兼容模式”这样的选项
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 1970-01-01
      相关资源
      最近更新 更多