DebuggerStepThrough 属性允许您跳过进入某些方法/类/属性。

DebuggerStepThrough being ignored 中澄清了 c# 编译器不会将此属性继承到编译器生成的 IEnumerable<T> 实现中。

这种失败的一个简单例子是:

static void Main(string[] args)
{
    var a = SkipMe().ToList();
}

[System.Diagnostics.DebuggerStepThrough]
static IEnumerable<int> SkipMe()
{
    // comment out line below and the throw will be stepped over.
    yield return 1;
    throw new Exception();
}

有没有办法让 C# 编译器将 DebuggerStepThrough 属性添加到自动生成的类型?

有没有办法让 Visual Studio 跳过调试到具有 [CompilerGenerated] 属性的任何类型?

——

附录:一些说明性屏幕截图

按F5后的结果

c# - DebuggerStepThrough 可以继承到自动生成的IEnumerable 实现中吗?-LMLPHP

c# - DebuggerStepThrough 可以继承到自动生成的IEnumerable 实现中吗?-LMLPHP

视觉工作室版本:

c# - DebuggerStepThrough 可以继承到自动生成的IEnumerable 实现中吗?-LMLPHP

我们缺少的属性:

c# - DebuggerStepThrough 可以继承到自动生成的IEnumerable 实现中吗?-LMLPHP

最佳答案

我认为没有办法达到你想要的效果。

  • 没有办法让C#编译器将此属性复制到生成状态机方法中。
  • 您无法通过将 DebuggerStepThrough 添加到包含迭代器方法的类来解决此问题。调试器只查看直接父类型,而不查看包含嵌套类型的类型。

  • 我能想到的唯一真正的方法是将所有您不想调试的代码放在一个单独的 DLL 中。然后不要为该特定 DLL 加载 PDB。

    关于c# - DebuggerStepThrough 可以继承到自动生成的IEnumerable 实现中吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8751814/

    10-13 06:22