assert aus debug version entfernen
-
Ich definiere Assert neu und ersetze es mit einer eigenen Funktion, welche die Informationen in eine Datei schreibt. Und das "neue Assert" funktioniert auch in der Release Version.
-
Wenn in deinem Programm eine Assertion fehlschlägt, hat dein Code einen Fehler. Die angemessene Vorgehensweise ist da nicht, die Fehlermeldung zu unterdrücken, sondern den Fehler zu beseitigen.
-
...und meine Funktion hilft genau dabei. Sie loggt die Fehler des Programms mit.
-
ja ansich wäre es wirklich besser den Fehler auszumachen und ihn zu tilgen.
Aber ich finde ihn nicht wirklich, und ich selber finde selber keinen fehler mehr in code. Aber eine kleinigkeit muss ja noch da sein....Irgendwo in der msdn hab ich was von logikfehler gelesen....
weiss vielleicht jemand wie diese fehler zu stande kommen und wie man dies dann vermeiden kann.
@ellek
danke für die erklärung hat mir weitergeholfen, werde das dann so machen wenn in diesem anlauf nicht der assert verschwindet
-
es kann nur besser werden schrieb:
weiss vielleicht jemand wie diese fehler zu stande kommen und wie man dies dann vermeiden kann.
Dafür gibt es beliebig viele Ursachen. Assertions sind dafür da, dich mit der Nase auf so einen Fehler zu stoßen.
Die Meldung über die fehlgeschlagene Assertion beinhaltet manchmal den geprüften Ausdruck, auf jeden Fall aber Dateiname und Zeilennummer. Dort solltest du zuerst nachsehen, denn möglicherweise gibt es an der Stelle einen Kommentar im Code, der näher beschreibt, was schief gelaufen ist.
Wenn du dein Programm im Debugger startest, solltest du gleich an diese Codeposition springen können, wenn die Assertion fehlschlägt. Das hätte den zusätzlichen Nutzen, dass du dir die Aufrufliste (Callstack) ansehen kannst. Da kannst du erkennen, aus welchem Aufruf in deinem Code dieses assert resultiert.Wenn wir dir helfen sollen, dann zeig uns den Code rund um die Assertion (Datei und Zeile sind wegen unterschiedlicher Versionen nicht immer eindeutig) und die Aufrufliste.
-
Ich sehe hier an nonamebody`s Beitrag keinen Text der Dich irgendwie dazu bringen sollte so darauf zu reagieren.
Ich weiß übrigens wo dein Fehler liegt:
In der Datei anzeige.cpp in Zeile 397.Dort steht ASSERT(irgendwas)
Da musst du das Assert wegmachen und es kommt kein ASSERT mehr.
In der Release kommt kein Assert weil dieses Macro nur in der Debugversion existriert.PS.:
Dein erstes Posting ist ungefähr so: "Ich habe ein Programm geschrieben wo ein Fehler drin ist. Wie bekomme ich den Fehler weg?"Jetzt sage mir den Informationsgehalt aus diesen Sätzen.
Solltest Du Rechtschreibfehler finden, darfst Du sie gerne behalten.
-
Der Code besteht aus zwei fkt. in denne ich eine File kopiere und den neuen Pfad in ein File schreibe:
Fkt 1:
CString pfad = "..\\orginale\\pkochen.txt"; CString in; CString pfadkopie= "..\\kopfadekochen.txt"; CString kochen = "..\\Rezepte\\kochentxt\\"; CStdioFile out; CStdioFile open; CString buff; if(open.Open(pfadkopie,CFile::modeReadWrite | CFile::modeCreate)) { if(out.Open(pfad,CFile::modeRead)) { while(out.ReadString(in)) { if(!in.IsEmpty()) { in.TrimRight(); alt=in; int nTmp = in.ReverseFind('\\'); in.Delete(0,nTmp+1); pfadfilekopie = kochen + in; pfadfilekopie.TrimRight(); DWORD i = open.SeekToEnd(); open.WriteString(pfadfilekopie); open.WriteString("\n"); kopieidx(); // aufruf fkt. 2 in.Empty(); alt.Empty(); pfadfilekopie.Empty(); } } } } open.Close(); out.Close();
Fkt2:
int idx = 0; CString wand; CStdioFile kopie; CStdioFile org; CString str; CString teil; int soll =0; CString go; MessageBox(alt,pfadfilekopie); if(org.Open(alt, CFile::modeRead)) { if(kopie.Open(pfadfilekopie, CFile::modeCreate | CFile::modeWrite)) { while(org.ReadString(go)) { CString leer = " "; str.Format("%s%s",go,leer); while(str.GetLength() > 0) { soll = str.Find(' '); teil = str.Left(soll); str = str.Right(str.GetLength() - soll); while(str.Left(1) == _T(' ')) { str.TrimLeft(); } if(!teil.IsEmpty()) { idx++; wand.Format("%i",idx); kopie.WriteString(teil); kopie.WriteString(" " + wand); kopie.WriteString("\n"); } } teil.Empty(); wand.Empty(); str.Empty(); } } } org.Close(); kopie.Close();
ich hoffe es ist für euch verständlcih was ich wo mache wenn nicht schreibt kurz....
-
Und wo tritt der ASSERT in deinem Code auf? Bitte Debugger benutzen.
-
hi unix,
in der Fehlermeldung steht
in line 267
in filetxt.cppnoch n e dumme frage du sagst das ich das das weg machen soll,
wo mache ich das genau weg???
weil ich hab in meinem code nix mit assert geschrieben
-
Der fehler triit eigentlich dann auf wenn in Fkt 2 das erste file geöffnet wird und zwar beim 2. durchlauf.
-
es kann nur besser werden schrieb:
hi unix,
in der Fehlermeldung steht
in line 267
in filetxt.cppIch habe hier deine Datei filetxt.cpp vorliegen. In Zeile 267 steht aber kein Code.
-
das ist doch das File in dem der Code steht den ich postede oder????
Wenn ich da in die Line 267 gehe ist da eine '{' sonst nix.....
daher weiss ich auch nicht wo der fehler sein soll..... oder was ich ändern soll
-
Du schliesst die files immer, unabhängig davon, ob das öffnen fehlschlug oder nicht - dass ist zumindest ein logikfehler, ob es zum fehlschlagen einer assertion führt, weiss ich jetzt nicht. im übrigen ist close hier sowieso überflüssig, das macht der destruktor von CStdioFile schon für dich. ohne genauere angaben ist eine fehlersuche hier zwecklos - im übrigen ist der debugger dein freund.