2016-11-14 3 views
0

Meine aktuelle Installation von Visual Studio 2015 erlaubt es mir nicht, eine nicht behandelte Ausnahme beim Ausführen von Code aus der IDE zu werfen. Ich mag nicht behandelte Ausnahme Code auszuüben, aber meinen Code:Debuggen der Behandlung der Behandlung von Ausnahmebehandlungen

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 

nur während einer normalen Laufzeit funktioniert, nicht, wenn der Code in der IDE ausgeführt wird.

Wie kann ich meinen unbehandelten Ausnahmecode in der IDE debuggen?

Ich schaute in Debug, Windows, Ausnahmeeinstellungen, aber ich sehe keinen Weg zu tun, was ich tun möchte. Gibt es noch eine weitere globale Einstellung, die eine nicht behandelte Ausnahme ermöglicht, ohne dass die IDE die Ausnahme erfasst?


Ich bin mit dem ApplicationsEvents.vb das Ereignis Haken:

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 

Resolution wurde ein Test Stub zu erstellen, die den Code ausgeübt, die vom Handler aufgerufen wurde:

Dies ermöglicht nicht das Testen des Handlers, aber es übt den Code aus, den der Handler aufruft. Ein Blick auf einige alte Kommentare dachte ich, das aus fünf + Jahren ... :(

+0

Mein 'bntTest_Click' Code befindet sich auf einem Kind Form innerhalb eines übergeordneten MDI-Formular. – rheitzman

+0

Nach Wenn ich die Bearbeitung in ApplicationEvents sehe, ist das anders als die Art, wie ich den Handler hinzugefügt habe. Ich habe Ihren Code ausprobiert und bestätigt, dass er nicht funktioniert. Versuchen Sie, wie möglich. – djv

+0

Ich habe versucht, die Testausnahme vom MDI-Container zu werfen) und es scheitert auch. Ihr Weg arbeitete an einem eigenständigen Formular, aber ich muss die unbehandelten Ereignisse auf der Anwendungsebene erfassen, da ich eine Mischung aus Standalone- und MDI-Child-Formularen habe. – rheitzman

Antwort

0

einen Handler hinzufügen 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

Ich habe den Handler an Ort und Stelle, funktioniert, wenn die Exe außerhalb der IDE ausgeführt wird. Ich versuche, den Handler von der IDE zu debuggen. Wenn ich eine unbehandelte Ausnahme wie im Post ablege, hält die IDE an und ruft den Handler nicht auf. – rheitzman

+0

Seltsam, meine IDE ruft den Handler auf * then * stoppt die Ausnahme. Unter Win7x64 VS2012 v4.6 scheint meine Erfahrung mit http://stackoverflow.com/questions/406385/handling-unhandled-exceptions-problem – djv

+0

Ich denke, der Unterschied kann C# vs VB.net und die VB Application Events-Funktion sein von Visual Studio. Könnte 2012 vs 2015 sein, wie ich dachte, ich könnte dieses Ereignis einmal debuggen. – rheitzman