Try-Catch reagiert nicht

  • VB.NET

Es gibt 58 Antworten in diesem Thema. Der letzte Beitrag () ist von Storch.

    Try-Catch reagiert nicht

    Hallo Leutz,

    ich habe schon einiges über Sinn bzw. Unsinn zur Verwendung von Try-Catch-Blöcken gelesen.
    Mit meinem Laienverstand vertrete ich die Ansicht, das das Abfangen von Fehlern mittels Try ... Catch nur dann Sinn macht, wenn man auch eine adäquate Reaktion auf den Fehler einbaut.

    Diese wollte ich jetzt tun aber aus mir unersichtlichen Gründen, reagiert mein Code auf keine Try..Catch-Anweisung. Ich habe an mehreren Stellen in meinem Progrämmchen Fehler provoziert,
    immer das selbe... Try-Catch = Fehlanzeige, statt dessen bleibt der Compiler in der Fehlerzeile stehen und gibt mir ne Meldung.

    Ich meine mich zu erinnern, am Anfang meiner VB.Net-"Karriere", mit den Debugging-Einstellungen rumgespielt zu haben, weil ich Anfangs keine Fehlermeldungen vom Compiler bekam.
    Diese habe ich dann endlich bekommen. Ich frage mich nun, ob ich irgendwelche Einstellungen vorgenommen habe, die die Ausführung von Try-Catch unterdrücken.

    Kann mir da jemand raten? Gibt es evtl. irgendwelche Optionen, die dafür zuständig sind??
    GUD Uwe

    :whistling: Wenn ich genau wüsste, was ich nicht weiß, dann wäre mein Wissen vollständig!

    Storch schrieb:

    statt dessen bleibt der Compiler in der Fehlerzeile stehen und gibt mir ne Meldung.
    Welche Meldung? Welche Zeile?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Storch schrieb:

    Die Fehlermeldung und die Zeile, in der der Fehler entsteht.
    Na fein.
    Ich freue mich, dass Du nun keine Probleme mehr hast. :thumbsup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Na fein.
    Ich freue mich, dass Du nun keine Probleme mehr hast. :thumbsup:


    Hier das Corpus Delicti:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Xml.Serialization
    3. <Serializable()>
    4. Public Class cls_fileoperations
    5. 'weitere Codes
    6. Public Shared Function Load() As cls_fileoperations
    7. Dim retval As cls_fileoperations
    8. Dim xmlReader As New XmlSerializer(GetType(cls_fileoperations))
    9. Dim xmlFile As New StreamReader("cls_fileoperations.xml")
    10. Try
    11. retval = CType(xmlReader.Deserialize(xmlFile), cls_fileoperations)
    12. xmlFile.Close()
    13. xmlFile.Dispose()
    14. Return retval
    15. Catch ex As Xml.XmlException
    16. MessageBox.Show(ex.Message, "cls_fileoperations / Load ")
    17. End Try
    18. End Function
    19. End Class


    Es geht darum, per DeSerialize die Daten einer xml-Datei in die Klasse zu laden.
    Wenn die XML-Datei keinen oder einen fehlerhaften Header hat, kommt es zu einer xml.xmlexeption in der Zeile 18.
    Try reagiert aber nicht.
    GUD Uwe

    :whistling: Wenn ich genau wüsste, was ich nicht weiß, dann wäre mein Wissen vollständig!
    cType hat doch auch nen Try integriert oder?
    Was passiert denn bei nem DirectCast?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Storch schrieb:

    Wenn die XML-Datei keinen oder einen fehlerhaften Header hat
    Kannst Du mal solch eine Datei posten, damit wir das nachvollziehen können?
    Am besten eine funktionierende und eine nicht funktionierende.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Haste dir mal vom Erfinder den Link angesehen?
    Kannte ich bis dato auch noch nicht, schaut aber so aus, als würd das wie die Faust aufs Auge passen.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    @Storch::

    RodFromGermany schrieb:

    Kannst Du mal solch eine Datei posten, damit wir das nachvollziehen können?
    Am besten eine funktionierende und eine nicht funktionierende.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Du catcht auch nur eine Xml.XmlException.
    Mach mal so:

    VB.NET-Quellcode

    1. Try
    2. retval = CType(xmlReader.Deserialize(xmlFile), cls_fileoperations)
    3. xmlFile.Close()
    4. xmlFile.Dispose()
    5. Return retval
    6. Catch ex As Xml.XmlException
    7. MessageBox.Show(ex.Message, "cls_fileoperations / Load ")
    8. Catch ex as Exception
    9. MessageBox.Show("Andere Exception " & ex.Message, "cls_fileoperations / Load ")
    10. End Try


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    @fichz:: Hab ich auch gerade reproduziert.
    @Storch:: Deine Klasse knallt, wenn der XML-File und die klasseninterne XML-Struktur nicht übereinstimmen.
    Überlege, ob XmlSerializer die richtige Klasse für Dein Problem ist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich hänge mal ein Beispiel an.... FrameWork 4.0

    Projekt starten, dann läuft es sofort auf den Fehler.

    Die fehlerhafte XML-Datei heisst cls_fileoperations.xml und liegt im Debug-Ordner. Der Fehler... die Datei ist völlig leer und hat somit auch keinen Header.
    dort findet sich auch eine 'optionen.xml', die zeigt aber nur, wie eine xml-Datei richtig aussehen kann und hat nichts mit dem Projekt an sich zu tun.

    Die Klasse wird über

    VB.NET-Quellcode

    1. fileops = cls_fileoperations.Load

    instanziert.

    erst danach wären alle weiteren Methoden der Klasse verfügbar.

    Was ich eigentlich über Try-Catch erreichen will:

    Wenn dieser Fehler eintritt, wollte ich mit der Klasseninternen Methode 'DefaultValues' die XMl-Datei richtig erstellen und mit Defaultwerten versehen.
    Dieses funktioniert an sich schon, nur komme ich wegen der Try-Geschichte garnicht erst dort hin.
    Dateien
    GUD Uwe

    :whistling: Wenn ich genau wüsste, was ich nicht weiß, dann wäre mein Wissen vollständig!

    VB.NET-Quellcode

    1. Public Shared Function Load() As cls_fileoperations
    2. Dim fi = New FileInfo("cls_fileoperations.xml")
    3. If Not fi.Exists Then Return New cls_fileoperations
    4. Dim xmlReader As New XmlSerializer(GetType(cls_fileoperations))
    5. Dim xmlFile As New StreamReader(fi.FullName)
    6. Try
    7. Return DirectCast(xmlReader.Deserialize(xmlFile), cls_fileoperations)
    8. Catch ex As Xml.XmlException
    9. MessageBox.Show(ex.Message, "cls_fileoperations / Load ")
    10. Catch ex As System.InvalidOperationException
    11. MessageBox.Show(ex.ToString, "")
    12. Finally
    13. xmlFile.Close()
    14. End Try
    15. Return New cls_fileoperations
    16. End Function

    Versuchs mal so.
    Aua, was mir gerade auch noch auffällt: Wieso zerstörst du das xmlFile 2x? Das ist unnötig, einmal reicht vollkommen aus.
    Mfg
    Vincent

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VincentTB“ ()

    fichz schrieb:

    Du catcht auch nur eine Xml.XmlException.
    Mach mal so:

    Habe ich und es ändert sich nix. Try läuft nicht an.

    Ich hänge einen Screenshot dran. Vllt. könnt ihr mit dem was anfangen.
    Bilder
    • screenshot_tryfehler.jpg

      197,55 kB, 1.264×567, 106 mal angesehen
    GUD Uwe

    :whistling: Wenn ich genau wüsste, was ich nicht weiß, dann wäre mein Wissen vollständig!
    sorry @erfinder

    ich bin hier kurz davor, den ganzen scheiss hin zu schmeissen. vermutlich bin ich zu blöde.

    ich weiss echt nicht, was ich da setzen soll und was nicht. ich habe es mit zurück setzen versucht, ich habe alles abgewählt, obwohl er einiges wohl standardmäßig aktiviert zu lassen scheint.

    trotzdem springt Try nicht an. aber vermutlich bin ich nur zu doof.

    Dann ist mir noch aufgefallen....

    wenn ich die 'Common Language Runtime exeptions' alle auf ausgelöst einstelle, dann bleibt der COmpiler auch in Zeilen stehen die schon mal funktioniert haben. zb in dieser:

    VB.NET-Quellcode

    1. Dim xmlReader As New XmlSerializer(GetType(cls_fileoperations))


    außerdem hab ich schon öfter beobachtet, das im Ausgabefenster Exeptions gemeldet werden, obwohl das Programm scheinbar fehlerfrei durchläuft.
    Ich weiss nicht, was ich davon halten soll.
    GUD Uwe

    :whistling: Wenn ich genau wüsste, was ich nicht weiß, dann wäre mein Wissen vollständig!