Отладка исключений в инициализаторах типов - PullRequest
3 голосов
/ 22 октября 2009

У меня есть статический класс без статического конструктора, но много статических членов. Я выбрасываю исключение TypeInitializationException при первом использовании класса.

Я нарушаю исключения CLR и отключил «Просто мой код».

Проблема в том, что я получаю это исключение только при первом использовании этого класса; Я не ломаюсь при сбое инициализатора статического поля. Я мог бы, конечно, удалить статические элементы, пока не найду виновника, но есть ли более простой способ?

У кого-нибудь есть советы по отладке статических инициализаций полей?

Ответы [ 2 ]

12 голосов
/ 22 октября 2009

Нажмите Отладка, Исключения (или нажмите Ctrl + D, E) и скажите Visual Studio, чтобы она прерывалась при возникновении любого исключения. Затем он прервется при возникновении исключения InnerException, прежде чем он будет заключен в исключение TypeInitializationException, и прервет строку, выдавшую исключение.

В качестве альтернативы посмотрите на стек вызовов InnerException и посмотрите, какому из ваших полей оно соответствует.

Или попробуйте установить точку останова на каждом статическом инициализаторе; последний удар - это тот, который вызвал исключение.

2 голосов
/ 22 октября 2009

Я бы попробовал следующее

  • Отключить только мой код: снимите флажок Инструменты -> Параметры -> Отладка -> Просто мой код
  • Прерывание при исключениях первого шанса: Отладка -> Исключение -> Проверить выброшенное поле для исключений CLR

Это должно привести вас к тому месту, где происходит исключение.

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