#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 по управлению исключениями с помощью отладчика:
- В окне Настройки исключений откройте контекстное меню, щелкнув правой кнопкой мыши в окне и затем выбрав Показать столбцы. (Если вы отключили только мой код, вы не увидите эту команду.)
- Вы должны увидеть второй столбец с именем Дополнительные действия. В этом столбце отображается Продолжение, когда пользовательский код не обрабатывает определенные исключения, что означает, что отладчик не прерывается, если это исключение обрабатывается не в пользовательском коде, а во внешнем коде.
- Вы можете изменить этот параметр либо для конкретного исключения (выберите исключение, щелкните правой кнопкой мыши и выберите / отмените выбор Продолжить, если оно не обработано в пользовательском коде), либо для целой категории исключений (например, для всех исключений Common Language Runtime).