Может ли 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]()
Ответы
Ответ 1
Я не думаю, что есть способ добиться эффекта, который вы ищете.
- Невозможно заставить компилятор С# копировать этот атрибут в метод генератора состояний.
- Вы не можете обойти это, добавив
DebuggerStepThrough
к классу, содержащему метод итератора. Отладчик смотрит только на родительский тип, а не на типы, содержащие вложенный тип.
Единственный реальный способ, который я могу придумать для этого, - поставить весь код, который вы не хотите отлаживать, в отдельную DLL. Затем не загружайте PDB для этой конкретной DLL.