vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
UnhandledException Event Stacktrace ermitteln 
Autor: Jojo
Datum: 29.04.14 13:04

Hallo,

ich habe das folgende Problem:

Ich möchte in ein Programm (vb, Framework 4.5) eine Globale Fehlerbehandlung einbauen. Dies soll eine auftretenden unerwarteten Fehler mir per Email zusenden.

Das Funktioniert auch alles super über die Datei "ApplicationEvents.vb":

Namespace My
 
    ' Für MyApplication sind folgende Ereignisse verfügbar:
    ' 
    ' Startup: Wird beim Starten der Anwendung noch vor dem Erstellen des 
    ' Startformulars ausgelöst.
    ' Shutdown: Wird nach dem Schließen aller Anwendungsformulare ausgelöst. 
    ' Dieses Ereignis wird nicht ausgelöst, wenn die Anwendung nicht normal 
    ' beendet wird.
    ' UnhandledException: Wird ausgelöst, wenn in der Anwendung ein 
    ' Ausnahmefehler auftritt.
    ' StartupNextInstance: Wird beim Starten einer Einzelinstanzanwendung 
    ' ausgelöst, wenn diese bereits aktiv ist. 
    ' NetworkAvailabilityChanged: Wird beim Herstellen oder Trennen der 
    ' Netzwerkverbindung ausgelöst.
 
 
    Partial Friend Class MyApplication
 
        ''' <summary>
        ''' Dieses Event wird immer dann aufgerufen, wenn ein Fehler auftritt, 
        ' der nicht behandelt wurde.
        ''' Dann wird ein Email mit den nötigen Daten erstellt und verschickt.
        ''' </summary>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        ''' <remarks></remarks>
        Private Sub MyApplication_UnhandledException(ByVal sender As Object, _
          ByVal e As _
          Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs_
          ) Handles Me.UnhandledException
            My.Application.Log.WriteException(e.Exception, _
            TraceEventType.Critical, "Unhandled Exception.")
 
            Dim st As New StackTrace(e.Exception, True)
            Dim frames As StackFrame() = st.GetFrames()
            Dim TS As String = "UnhandledException:" & vbCrLf & _
              e.Exception.Message & vbCrLf & vbCrLf & "Stack Trace:" & vbCrLf
 
            ' Iterate over the frames extracting the information you need
            For Each frame As StackFrame In frames
                TS += frame.GetFileName() & " : " & frame.GetMethod().Name & " (" & _
                  "" & frame.GetFileLineNumber() & "," & _
                  frame.GetFileColumnNumber() & ")" & vbCrLf
            Next
 
            TS += vbCrLf & e.Exception.StackTrace.ToString
 
            'Sendmail("xxx@xxx.de", TS)
            End
        End Sub
    End Class
End Namespace
Soweit so gut. Liegt jetzt aber der Fehler in einer Unterfunktion oder in einem anderen Thread, dann bekomme ich nur den Startort im Stacktrace:

Stack Trace:
: FastWaitAll (0,0)
: Invoke (0,0)
: Invoke (0,0)
C:\Projekte10\Import_sopr.vb : Import_Load (55,9)
: Invoke (0,0)
...

at System.Threading.Tasks.Task.FastWaitAll(Task[] tasks)
at System.Threading.Tasks.Parallel.Invoke(ParallelOptions parallelOptions, Action[] actions)
at System.Threading.Tasks.Parallel.Invoke(Action[] actions)
at Import_Sopr.Import.Import_Load(Object eventSender, EventArgs eventArgs) in C:\Projekte10\Import_sopr.vb:line 55
at System.EventHandler.Invoke(Object sender, EventArgs e)
at System.Windows.Forms.Form.OnLoad(EventArgs e)
...


Schau ich jetzt im dem File an der Line 55 nach steht dort der Ausruf mehrer Funktionen:

        Parallel.Invoke(Sub()
                            Run1()
                        End Sub,
                            Sub()
                                run2()
                        End Sub,
                            Sub()
                                run3()
                            End Sub)
Das heißt, dass mir die Information aus den Thead fehlt und ich stattdessen die Info aus dem Ursprung (der die Threads startet) bekomme.

Nehme ich die Fehlerbehandlung raus - bekomme ich die wahre Quelle angezeigt:

************** Exception Text **************
System.AggregateException: One or more errors occurred. ---> System.InvalidCastException: Conversion from string "Import" to type 'Integer' is not valid. ---> System.FormatException: Input string was not in a correct format.
at Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)
at Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
--- End of inner exception stack trace ---
at Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
at Import_Sopr.Import.IM_DDEB() in C:\Projekte10\import\Import_sopr.vb:line 1015 at Import_Sopr.Import._Lambda$__2() in C:\Projekte10\import\Import_sopr.vb:line 65 at System.Threading.Tasks.Task.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
--- End of inner exception stack trace ---


Ich muss also die Gleichen Infos in meiner Email bekommen wie die, die im Abbruch-Fenster angezeigt werden.

Wer hat eine Idee wo das Problem liegt?

Joachim

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
UnhandledException Event Stacktrace ermitteln2.205Jojo29.04.14 13:04
Re: UnhandledException Event Stacktrace ermitteln1.237Kuno6009.05.14 04:02
Re: UnhandledException Event Stacktrace ermitteln1.265Jojo09.05.14 07:44

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel