Могу ли я настроить параметры визуальной студии «Сломать при возникновении исключения» программно? - PullRequest
20 голосов
/ 07 мая 2009

Коротко:

В Visual Studio 2008 меню Debug имеет параметр Exceptions....
При щелчке по нему открывается диалоговое окно «Сбой при возникновении исключения», в котором я отмечаю флажок «Общие исключения времени выполнения языка».

Я хочу, чтобы иметь возможность поставить галочку / снять флажок программно.

Разработка:

Это приводит к сбою отладчика при возникновении любого исключения CLR (а не при его перехвате и перебрасывании), так что это отлично подходит для устранения неполадок.

Проблема в том, что он перехватывает все исключения CLR, и .NET Framework генерирует и перехватывает внутреннюю группу исключений, которые также отлавливаются. Это приводит к тому, что отладчик работает с множеством исключений, которые меня не волнуют, поскольку они являются внутренними для фреймворка, а не проблемой.
WCF особенно плохо в этом, и, как удача, мое приложение повсеместно использует WCF.

Я бы хотел, чтобы флажок был выключен, и как только мое приложение запустилось (и прошло этап подключения к WCF и все внутренние исключения), затем включило его, чтобы отключить все исключения отныне .

  • Я знаю, что мне не нужно ловить общий улов для «всех исключений clr», однако список возможных исключений составляет около 2 миль, и для прокрутки и выбора тех, которые вы хотите (и затем если я что-то пропущу).

Ответы [ 6 ]

30 голосов
/ 22 мая 2009

Вы можете включить / выключить их через API автоматизации Visual Studio (называемый DTE). Взгляните на API Debugger3.ExceptionGroups. Например:

' Turn off NullArgumentException.
Dim debugger As Debugger3 = DTE.Debugger
Dim exceptionGroup As ExceptionSettings = dbg.ExceptionGroups.Item("Common Language Runtime Exceptions")
exceptionGroup.SetBreakWhenThrown(False, "System.NullArgumentException")

Таким образом, вы можете легко написать макрос для включения / выключения определенных исключений. Чтобы вызвать макрос из вашего приложения, вы можете запустить «devenv / command».

В качестве альтернативы, вы можете использовать DTE из вне процесса и автоматизировать Visual Studio напрямую (без макросов).

Подробнее:

  1. Настройка обработки исключений в отладчике VS
  2. Debugger3.ExceptionGroups
  3. Девенв / команда
  4. Как: получить ссылки на объекты DTE и DTE2
8 голосов
/ 19 февраля 2010

Это не решает ваш вопрос напрямую, но есть удобный аккорд ctrl-D + E, который вызывает диалог исключений отладки. Ctrl + Alt + E сделает то же самое.

1 голос
/ 22 мая 2009

Вероятно, вы можете сделать это, создав макрос (как показано в примере Михаэля Лехенбауэра ), а затем заново настройте точку останова для запуска макроса и продолжения выполнения. Вы можете сделать то же самое в конце раздела кода, который вам нужен, чтобы снова отключить эту опцию или вручную отключить ее между сеансами отладки.

1 голос
/ 07 мая 2009

Вне моей головы (так что это может быть бессмысленно), вы можете настроить отладчик так, чтобы он прерывался только на необработанных CLR-исключениях, а затем создать делегат / событие-обработчик для всех исключений во время кода инициализации и проглотить CLR (ОК) ОК, только в режиме отладки), а затем удалите делегат / событие в той точке кода, где вы хотите, чтобы VS начал прерываться при исключениях CLR.

0 голосов
/ 25 июня 2013

Там также

if (Debugger.IsAttached) {Debugger.Break ()}

0 голосов
/ 07 мая 2009

Конечно, вы можете сделать это с помощью надстройки Visual Studio или macro .

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