Подтвердить что ты не робот

Может ли DebuggerStepThrough унаследоваться в автоматически сгенерированную реализацию IEnumerable?

Атрибут DebuggerStepThrough позволяет пропустить нарушение определенных методов/классов/свойств.

В DebuggerStepThrough игнорируется, выясняется, что компилятор С# не наследует этот атрибут в сгенерированной компилятором реализацию 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();
}

Есть ли способ заставить компилятор С# добавить атрибут DebuggerStepThrough к автоматически созданному типу?

Есть ли способ получить визуальную студию для пропуска отладки в любые типы с помощью атрибута [CompilerGenerated]?

-

Добавление: некоторые иллюстративные скриншоты

Результат после нажатия F5

screen 1

screen 2

Версия Visual Studio:

snip 3

Наш недостающий атрибут:

the missing attribute

4b9b3361

Ответ 1

Я не думаю, что есть способ добиться эффекта, который вы ищете.

  • Невозможно заставить компилятор С# копировать этот атрибут в метод генератора состояний.
  • Вы не можете обойти это, добавив DebuggerStepThrough к классу, содержащему метод итератора. Отладчик смотрит только на родительский тип, а не на типы, содержащие вложенный тип.

Единственный реальный способ, который я могу придумать для этого, - поставить весь код, который вы не хотите отлаживать, в отдельную DLL. Затем не загружайте PDB для этой конкретной DLL.