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

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

В игнорируется DebuggerStepThrough поясняется, что компилятор 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

screen 1

screen 2

Версия Visual Studio:

snip 3

Наш отсутствующий атрибут:

the missing attribute

1 Ответ

3 голосов
/ 06 января 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...