Предотвращение сбоя Visual Studio при создании исключений

#visual-studio #visual-studio-2010 #debugging

#visual-studio #visual-studio-2010 #отладка

Вопрос:

Я тестирую перехват исключений, поэтому мне не нужны перерывы Visual Studio при таких мыслях, как thrown new NullReferenceException("myVar") .

У меня есть следующее в разделе Debug => Исключения

введите описание изображения здесь

однако VS прерывает работу с исключениями. Что мне делать?

PS.

для необработанного исключения приложения я «перехватываю» их, используя Application.UnhandledException как в следующем:

 ''' <summary>Occurs when the application encounters an unhandled exception.</summary> '
Private Sub Application_UnhandledException(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException
  Dim message As String = String.Format("An application UnhandledException were thrown.{1}The application will now terminate.{1}'{0}'{1}{1}StackTrace:{1}{2}", e.Exception.Message, Environment.NewLine, e.Exception.StackTrace)
  MessageBox.Show(message)
End Sub
  

Комментарии:

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

2. @CodeNaked: Я проверил: исключение System.NullReferenceException не проверено.

3. Где именно происходит сбой VS? То, что у вас есть выше, технически не «обрабатывает» исключение, оно просто сообщает о нем. Вам нужно было бы установить для e.Handled значение true, чтобы действительно «обработать» его. Если при генерировании исключения происходит сбой, то вам может потребоваться попробовать «Сбросить все» в диалоговом окне исключения, поскольку что-то может быть не в порядке.

4. У меня такая же проблема… Нет решения?

Ответ №1:

У меня была такая же проблема, когда я начал использовать VS2010. У меня есть модульные тесты, которые ожидают исключений, и я создаю исключения из своих функций. Предполагается, что эти исключения обрабатываются пользователем моей библиотеки. В диалоговом окне Debug-> Exceptions я снял флажок в столбце User-Unhandled для исключений Common Language Runtime, и VS прекратил сбой при этих исключениях. Кстати, я не вижу второго столбца в диалоговом окне, которое вы прикрепили здесь.

Комментарии:

1. К вашему сведению, параметр отладки «Включить только мой код (только управляемый)» должен быть установлен, чтобы увидеть столбец «Необработанный пользователем» в окне исключений.

Ответ №2:

Если вы создаете исключение, которое нигде в вашем коде не обрабатывается, Visual Studio завершит работу. У него нет другого выбора: произошло необработанное исключение. За пределами Visual Studio приложение отобразило бы сообщение об ошибке и проинформировало пользователя о том, что произошло необработанное исключение.

Параметры, которые вы видите в диалоговом окне Debug -> Exceptions, позволяют настроить, прерывается ли Visual Studio только для всех исключений, включая те, которые позже обрабатываются в вашем коде. Их часто называют исключениями «первого шанса».

Помимо этого, вы никогда не должны сами создавать NullReferenceException ; это исключение среды выполнения, которое зарезервировано для среды выполнения. Вместо этого вы должны выбросить ArgumentNullException .

Комментарии:

1. Смотрите мой PS . Что касается вашего замечания, возможно, у вас есть причина, в любом случае, MSDN просто сообщает Note that applications throw the ArgumentNullException exception rather than the NullReferenceException exception...

Ответ №3:

Приведенный ниже метод работает для меня в Visual Studio 2015 (аналогичный процесс может работать для VS2010).

Взято из документации Visual Studio по управлению исключениями с помощью отладчика:

  1. В окне Настройки исключений откройте контекстное меню, щелкнув правой кнопкой мыши в окне и затем выбрав Показать столбцы. (Если вы отключили только мой код, вы не увидите эту команду.)
  2. Вы должны увидеть второй столбец с именем Дополнительные действия. В этом столбце отображается Продолжение, когда пользовательский код не обрабатывает определенные исключения, что означает, что отладчик не прерывается, если это исключение обрабатывается не в пользовательском коде, а во внешнем коде.
  3. Вы можете изменить этот параметр либо для конкретного исключения (выберите исключение, щелкните правой кнопкой мыши и выберите / отмените выбор Продолжить, если оно не обработано в пользовательском коде), либо для целой категории исключений (например, для всех исключений Common Language Runtime).