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

Могу ли я настроить программную визуальную студию "Бросьте, когда исключение выбрано"?

Коротко:

В Visual Studio 2008 меню Debug имеет параметр Exceptions....
При нажатии на это появляется диалоговое окно "Разрыв при вызове исключения", в котором я поставлю галочку рядом с "Исключениями общего времени выполнения языка".

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

Разработка:

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

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

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

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

Ответ 1

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

Ответ 2

Вы можете включить или отключить их через 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 из-за proc и автоматически автоматизировать Visual Studio (без использования макросов).

Дополнительная информация:

Ответ 3

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

Ответ 4

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

Ответ 6

Там также

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