Debug Assertion abfangen
-
Hallo allerseits
Ich arbeite momentan an einem Programm welches Dateien filtert und unnötige Inhalte weglässt. Eigentlich ist das Ganze schon seit geraumer Zeit fertig aber durch Zufall habe ich ein Problem entdeckt. Ab und zu gibt es Messdateien (ich scanne keine normalen Textdateien) die fehlerhaft sind bzw. bei denen Bytes verkehrt geschrieben wurden oder sonstwas. Immer wenn ich ein solches File wähle gibt es eine Meldung "Debug Assertion Failed!". Dies ist natürlich nur im Debugmodus von VC++ so, im Release-Modus kratzt einfach das Programm ab und macht nichts mehr. Ich wollte jetzt fragen ob es eine Möglichkeit gibt diese Fehler im Allgemeinen irgendwie abzufangen? Wenn das möglich wäre würde ich einfach alle Fehler die es geben kann abfangen und wenn so einer auftritt soll das Programm die Datei einfach überspringen und zur nächsten gehen. Am Ende des ganzen Scans soll es die fehlerhaften Dateien ausgeben damit der Benutzer erfährt dass sie in irgendeiner Weise nicht in Ordnung sind und sie ggf. löscht.
Hoffe ich habe mich genug verständlich ausgedrückt, ansonsten fragt einfach nach. Danke im Voraus...
-
Assertions benutzt man üblicherweise dort, wo das Programm nicht mehr weiterarbeiten kann. Abfangen ist also die falsche Strategie, du solltest die Ursache der fehlgeschlagenen Assertion finden und beheben. Die Tatsache, dass das Programm "abkrazt", wenn die Prüfung wegfällt, sollte Dir das auch klarmachen.
Stammt das assert von dir oder aus den MFC oder woanders her?
-
Dies ist natürlich nur im Debugmodus von VC++ so, im Release-Modus kratzt einfach das Programm ab und macht nichts mehr.
Jetzt denk mal scharf nach: was genau willst du abfangen?
Du siehst doch, dass es im Release-Build abkratzt. Also wird es wohl so sein, dass die Assertion das Abfangen ist.
-
also ich kann mich meinen vorrednern nur anschliessen: du solltest den fehler wohl richtig beheben und nicht ueber die absturzmeldungen dein prog navigieren.
in den FAQ(!!!) gibt es folgendes:
http://www.c-plusplus.net/forum/viewtopic.php?t=74328Esco
-
Ah tut mir Leid. Ich hab die FAQ angeschaut als ich auf das Board kam und konnte mich nicht mehr erinnern den Thread gelesen zu haben. Danke dafür, werd ich mir merken. Ich hab jedoch rausgefunden warum das Programm abstürzt. Er liest im Header die Länge der nachfolgenden Daten aus und weil die an einer Stelle irgendwie monströs ist "fällt" er sozusagen aus dem Array raus. Jetzt muss ich bevor er anfängt den Rest wie Timestamp etc. auszulesen eine if-abfrage machen ob die länge grösser ist als das gesamte array. Wenn ja, soll er die momentane Datei in ner Variable speichern und die while-Schleife abbrechen.
Danke für die Hilfe