Assertion Failed - File except.cpp, Line 151 ?

Wu-mc

Mitglied
Hallo Forum,

wenn ich bei meinem MFC Dialogbasierenden Programm bestimmte Aktionen ausführe und es anschließend beende, erhalte ich beim Beenden die genannte Fehlermeldung.

Komisch ist das dieser Fehler nur auftritt wenn ich zwei bestimmte Dialoge öffne, nur sind diese komplett verschieden. Der eine Dialog gibt mir etwas auf einen Drucker aus, der andere schreibt etwas in eine Datei.

Kennt einer solche Fehlermeldungen und hat vielleicht einen Anhaltspunkt für mich?

Grüße

Niko Will
 
Kannst du evtl mal etwas Code dazu posten? Z.B. den betreffenden Abschnitt der ecxept.cpp oder den aufrufenden Kontext.
 
Moin moin,
mit dem Debugger kann man recht schnell herausfinden, an welcher stelle das Programm ausgestiegen ist... Bei VS6, .Net und VS Embedded c++4.0 gibts die Möglichkeit, der "Variablen" - Übersicht... View->Debugg Windows->Variables... da kann man die Reihenfolge der Aufgerufenen Funktionen sehen... meist ist in den letzten drei vier Aufrufen was selbst geschreibenes drin... und da ist dann auch meist die Ursache zu sehen...

Einfach mal Probieren...

Gruss Michael
 
CodeFatal hat gesagt.:
... "Variablen" - Übersicht... View->Debugg Windows->Variables... da kann man die Reihenfolge der Aufgerufenen Funktionen sehen...
Kleine Korrektur: Da kann man zwar die Variablen ansehen, wie auch mit dem Menüpunkt 'Überwachung' (ich weiß nicht, wie das beim englischen VS heißt), wo man sich die zu überwachenden Variablen auswählen kann (per Hand eintragen oder per Drag&Drop aus dem Quellcodefenster). Die Liste der Aufgerufenen Funktionen bekommt man mit dem Menüpunkt 'Aufrufliste' (alles unter 'Ansicht->Debug-Fenster'), im Englischen 'Call-Stack' genannt.
 
Sry aber bei mir gibt unter dem Angegebenen Pfad das Edit Feld Context. da kann man die zuletzt gerufenen Funktionen auswählen und bekommt dann die jeweilgen aktuellen Variablen zu sehen...

Unter der Aufrufliste (Call Stack) gibts vermutlich nur die Funktionen aufgelistet oder irr ich mich da? Hab das Ding weder gesehen noch genutzt:-) da mir die Variablen immer wichtiger waren, Meist ist ja irgendein ungültiger Pointer an dem Dilemma schuld... Bei mir zumindest:-(

Die Überwachung (Watch) find ich recht praktisch wenns ums Debuggen geht und man nicht nur die im Aktuellen Schritt verwendeten Daten haben will...

Aber das muss jeder selber wissen...

Gruss Michael
 
Du hast recht, das Kontext-Feld war mir ehrlich gesagt noch gar nicht aufgefallen, da ich immer mit dem Call-Stack-Fenster arbeite. Da werden die Funktionen in einer Liste aufgezeigt, mit dem Werten der Parameter. Da hat man etwas mehr Übersicht. Aber das ist nur mein persönlicher Geschmack.
 
Vielen Dank für eure zahlreichen Antworten. Okay, habe das mit dem debugger mal versucht, hab leider bisher noch nicht viel erfahrung damit gesammelt, aber es gibt doch ein paar sachen die mir aufgefallen sind.

1. Wenn ich das Programm starte kommt beim 2. oder 3. Dialog "retcode: CXX0030 Error expression cannot be evaluated". Also Error hört sich ja schonmal net gut an, steht aber bei mehreren Variablen drin. Habe das jetzt mal so interpretiert das die Variable da noch kein Wert zugewiesen hat, seh ich das richtig?

2. Dann habe ich mittlerweile gemerkt das der Fehler einmal auftritt wenn ich etwas in eine Datei schreiben will, es liegt aber nicht am Schreiben selber sondern es kommt darauf an was ich schreiben will. Schreibe ich einen Teststring dann funktioniert es, schreibe ich meine eigentlichen Daten dann geht es nicht.
Beim Debuggen kommt an dieser Stelle ein Pop-Up mit der Meldung "First-chance exception in MobiCash.exe: 0xC0000005: Access Violation". Anschließend werden die Variablen für "this" und "i" in rot dargestellt, was bestimmt nichts gutes heißt, oder?
Will ich weiter machen kommt "Pass exception on to the program being debugged?", was wohl soviel heißt ob er wirklich weiter machen soll
Unten im Debugger wird folgendes ausgegeben:
Data Abort: Thread=8debc814 Proc=8c139350 'MobiCash.exe'
AKY=00004001 PC=00015938 RA=03f880a4 BVA=00000fff FSR=00003007

Wenn ich anschließend normal weiter mache kommt kein Fehler mehr, bis ich das Programm beende, dann kommt die bereits erwähnte Fehlermeldung.

Kann mir da jemand weiter helfen und vielleicht daran gleich den Debugger etwas erklären?
 
Ach, okay, das mit dem Debugger ist echt ne tolle Sache, habe jetzt festgestellt das meine Schleife die die Datensätze in die Datei schreibt einmal zuviel ausgeführt wird. Jetzt habe ich einfach das Feldelement nach dem letzten Datensatz auf 0 gesetzt und meine Schleife bricht nun an der richtigen Stelle ab und der Fehler ist weg.

Dann schau ich jetzt mal an was es bei der anderen Funktion liegt.

Aber kann mir jemand noch dieses "CXX0030 Error expression cannot be evaluated" erklären, weil das doch bei vielen Variablen drin steht.
 
Habe jetzt mal meine andere Funktion geprüft und bei der ist es echt seltsam. Und zwar ist es ein Dialog der einen Button hat, bei dem etwas ausgedruckt wird. Nun hab ich festgestellt das es wohl nicht am Code des Buttons liegt, denn wenn ich den Breakpoint auf die letzte Klammer der OnButton() Funktion lege, kommt die Fehlermeldung erst nach dem Breakpoint. Und zwar "First-chance exception in MobiCash.exe: 0x80000002: Datatype Misalignment", was hat das zu bedeuten?
 
Normalerweise heißt dieser Fehler(CXX0030), daß Du einen Zeiger verwendest, der nicht richtig initialisiert wurde und daher auf einen falschen Speicherbereich zeigt. So kann der Zeiger z.B. NULL sein oder auf einen Speicherbereich außerhalb des Applikationsspeichers zeigen.
Prüfe also den Zeiger an der Stelle, wo der Fehler auftritt.
 
Zurück