assert aus debug version entfernen



  • ich habe geschrieben :

    Bei der Release ist er nicht vorhanden (wo wie es sein soll).

    Und nie etwas anderes behauptet....

    uns es existierten try catch behandlungen, beim öffnen von Files.

    Und davon abgesehen finde ich es sch** wie du mich hier runter machst
    les richtig und du brauchst dich nicht in show zu setzten.

    Auf so ne hilfe kann ich echt verzichten.



  • noch was
    schau mal wo das 's' und das 'w' auf der Tasttur sind.
    und ersetzte diese w mal duch ein s

    und schrieb ich ebenfalls das sie in der Debug version auftritt mit dem obigen und einwenig mitdenken klappt das dann mit dem richtig versthen.

    Es tut mir leid aber, ich finde es einfach nicht schön, wenn man so angefallen wird. Ich wollte hilfe und alles was dir eingefallen ist, einmal die frage durchlesen ohne weiter arbeit, ne antwort auswerfen, die du dir hättest sparen können wenn du nochmal gelesen hättest.

    Und es tut mir leid dass ich hier von eigentlichen sinn des threats wegkommen, aber das musst mal raus.
    Andere hätten in dem fall wenigsten auf die msdn verwiesen oder nochmal gelesen,....
    Und ich habe nun mal einproblem und es hilft mir sehr viel weiter wenn ich solche aantworten auf meine frage bekomme





  • dumme frage nochmal

    was genau machst du da (in der faq)

    Du fängst doch ein Assert ab, und weiter



  • 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.cpp

    noch 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.cpp

    Ich 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.


Anmelden zum Antworten