2016-11-14 4 views
0

Моя текущая установка Visual Studio 2015 не позволит мне бросать необработанное исключение при запуске кода из среды IDE. Я хочу, чтобы реализовать свой необработанное код исключения, но мой код:Как отлаживать обработку необработанных исключений

Private Sub btnTest_Click(sender As System.Object, e As System.EventArgs) Handles btnTest.Click 
    Throw New System.Exception("An unhandled test exception has occurred.") 
End Sub 

работает только во время нормального выполнения, не тогда, когда код выполняется в среде IDE.

Как я могу отладить мой необработанный код исключения в среде IDE?

Я смотрел в Debug, Windows, Exception Settings, но я не вижу способа делать то, что хочу. Есть ли еще один глобальный параметр, который позволит исключить необработанное исключение без использования IDE для исключения?


Я использую ApplicationsEvents.vb зацепить событие:

Namespace My 

' The following events are available for MyApplication: 
' 
' Startup: Raised when the application starts, before the startup form is created. 
' Shutdown: Raised after all application forms are closed. This event is not raised if the application terminates abnormally. 
' UnhandledException: Raised if the application encounters an unhandled exception. 
' StartupNextInstance: Raised when launching a single-instance application and the application is already active. 
' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected. 
Partial Friend Class MyApplication 
    Private Sub MyApplication_UnhandledException(sender As Object, e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException 
     ExpLog.LogUnhandledException(e, sender) 
     e.ExitApplication = Not ExpLog.InformUser 
    End Sub 
End Class 
End Namespace 

Решение создать тестовый окурок, который выполнял код, который был вызван обработчиком:

Private Sub Button6_Click(sender As System.Object, e As System.EventArgs) Handles btnMisc_Throw.Click 

    If ExpLog.InformUser() Then 
     MsgBox("Continue") 
    Else 
     MsgBox("End Program") 
    End If 

    ExpLog.LogMsgBox(New System.Exception("test unhandled exception"), "test LogMsgBox()",,, "programmer note") 

End Sub 

Это не позволяет тестировать обработчик, но выполняет код, который вызывает обработчик. Глядя на некоторых старых комментариев я понял это пять + лет назад ... :(

+0

Мой 'bntTest_Click' код находится на ребенка форме внутри родительской формы MDI. – rheitzman

+0

После видя ваше редактирование в ApplicationEvents, это отличается от того, как я добавил обработчик. Я пробовал ваш код и подтверждаю, что он не работает. Попытайтесь сделать это, если это возможно. – djv

+0

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

ответ

0

Добавить обработчик AppDomain.CurrentDomain.UnhandledException

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledExceptionHandler 
End Sub 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Throw New System.Exception("An unhandled test exception has occurred.") 
End Sub 

Public Shared Sub UnhandledExceptionHandler(ByVal sender As Object, ByVal args As UnhandledExceptionEventArgs) 
    MessageBox.Show(CType(args.ExceptionObject, Exception).Message) 
End Sub 
+0

У меня есть обработчик на месте, работает, когда exe запускается вне среды IDE. Я пытаюсь отладить обработчик из среды IDE. Когда я бросаю необработанное исключение, как и в сообщении, среда IDE останавливается и не будет вызывать обработчик. – rheitzman

+0

Странно, моя IDE вызывает обработчик *, затем * останавливается на исключении. Запуск Win7x64 VS2012 v4.6, мой опыт, похоже, jive с http://stackoverflow.com/questions/406385/handling-unhandled-exceptions-problem – djv

+0

Я думаю, что разница может быть C# vs VB.net и функцией VB Application Events Visual Studio. Может быть, 2012 против 2015, поскольку я думал, что могу отлаживать это событие однажды. – rheitzman

Смежные вопросы