JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=47d095482c487483bf3b0228683cb034Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Release Version will nicht funktionieren

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 07.11.2005, 21:08    Titel: Release Version will nicht funktionieren Antworten mit Zitat

Also, ich habe ein ziemliches Problem. Ich habe wieder einmal viel programmiert und so, und jetzt hat ein anderer mein Programm getestet und es lief bei ihm nicht. Dann hab ich mal Debugversion kompiliert und die hat funktioniert. Das einzige was ich bei den Projekteinstellungen geändert habe waren eigentlich die libs und die sind bei beiden Konfigurationen gleich.
Bei BlockBall hatte ich genau das selbe Problem, da konnte ich es dadurch lösen, das ich in der Release Version den Quellcode als Debugeinstellung mit in die exe gepackt habe. Das macht in meinen Augen eigentlich überhaupt keinen
Sinn, und ich möchte das eigentlihc bei meinem neuen Spiel nicht machen. Die Debugversion läuft zum Beispiel sehr langsam, und das ärgert mich natpürlich besonders. Hatte irgendjemand schon mal so ein Problem?
_________________
https://jonathank.de/games/


Zuletzt bearbeitet von Jonathan_Klein am 07.11.2005, 21:45, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
abc_d
JLI Master Trainee


Alter: 35
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 07.11.2005, 21:18    Titel: Antworten mit Zitat

Hast du Variablen immer mit 0 initialisiert?
_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 07.11.2005, 21:31    Titel: Antworten mit Zitat

ja, ich habe alle Variablen initialisiert. Außerdem tritt der Fehler scheinbar an einer sehr komsichen Stelle auf. Ich lade laufaniamtionen für verschiedene Richtugn. Wärend der die zweite lädt stürtzt er ab. Dabei sit die zweite im Prinzip genau wie die erste, die Dateien heißen nur anders. Die Debugversion läuft an dieser Stell problemlos. An den Dateien kanns da ja wohl kaum liegen, außerdem geht bei mir ja auch alles perfekt, in beiden Versionen. Warum das auf einem anderen Rechner nicht laufen soltle ist mir ein Rätsel, zumal ja zum Beispiel die Hardware unterstützung nciht der Fehelr sein kann, da der Absturz ja wärden dem Laden von einer Namation stattfindet die vorher shcon einmal funktioniert hat. Und das der Speicher voll ist oder irgend so was komsiches kann ja auch net sein, wenns in der Debugversion funktioniert. Ich ahtte das in BlockBall schon mal, da stürzte das Programm auf einem andern Rechner ab wärend er eine Funktion verließ. Also, die letze Zeile der Funktion machte einen Logbucheintrag, die Zeile direkt unter dem funktionsaufruf auch, und die fehlte in der Log, weshalb das Programm dazwischen abgestürtzt sein muss. Ich wüsste nicht wie ich so einen Fehelr beheben sollte.
Vor allen Dingen ist ja auch sehr seltsam, dass wenn man Debuginfos mitlinkt alles funktioniert.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 08.11.2005, 12:10    Titel: Antworten mit Zitat

Bei der Debug-Version werden veränderte Varianten der Operatoren new und delete benutzt, welche Variablen initialisieren, und beim freigeben testen, ob über die Grenzen hinaus geschrieben wurde.
Eventuell solltest du mal versuchen, eigene new- und delete-Operatoren zu verwenden, welche einen ähnlichen Schutz bieten / test durchführen. Eventuell könnte der Feler dort zu suchen sein.
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 08.11.2005, 14:13    Titel: Antworten mit Zitat

Kann ich mit Exceptions was machen? Ich meine wann kann ein Programm den schon abschmieren? Ist doch fast immer wegen irgendwelchen speichergeschichten, und da müssten Exceptions doch n bisschen auskunft drüber geben können, oder? Ich weiß nur nciht wirklich wie die Dinger funktionieren...
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 08.11.2005, 14:55    Titel: Antworten mit Zitat

Ich hab das mal so ausgetestet:
CPP:
//die 8 bewegungsrichtungen
   cLog::GetInstance() << LOGI("Mit exception laden:");
   try
   {
      m_Sprite[0]=m_Game.pGfxManager->LoadAnimatedSprite("images\\Player\\Vorne", 1.0f/24.0f);
      m_Sprite[1]=m_Game.pGfxManager->LoadAnimatedSprite("images\\Player\\VorneLinks", 1.0f/24.0f);
      m_Sprite[2]=m_Game.pGfxManager->LoadAnimatedSprite("images\\Player\\Links", 1.0f/24.0f);
      m_Sprite[3]=m_Game.pGfxManager->LoadAnimatedSprite("images\\Player\\Linkshinten", 1.0f/24.0f);
      m_Sprite[4]=m_Game.pGfxManager->LoadAnimatedSprite("images\\Player\\Hinten", 1.0f/24.0f);
      m_Sprite[5]=m_Game.pGfxManager->LoadAnimatedSprite("images\\Player\\Rechtshinten", 1.0f/24.0f);
      m_Sprite[6]=m_Game.pGfxManager->LoadAnimatedSprite("images\\Player\\Rechts", 1.0f/24.0f);
      m_Sprite[7]=m_Game.pGfxManager->LoadAnimatedSprite("images\\Player\\VorneRechts", 1.0f/24.0f);
   }
   catch(std::exception e)
   {
      cLog::GetInstance() << LOGE("Exception geworfen!");
      cLog::GetInstance() << LOGE(e.what());
   }

Es bricht immer in der zweiten Ladefunktion ab, aber es wird keine Exception geworfen. Die Funktionen sind sehr komplex, rufen viele Unterfunktionen auf und so, aber die müssten ja nach oben weiter gereicht werden.
Wie kann ein Programm abstürtzen, ohne das eine Exception geworfen wird?
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 08.11.2005, 15:22    Titel: Antworten mit Zitat

Sicher das eine Standardexception geworfen wird?
Erweiter doch mal deine Exceptionroutine um einen Default-Catchblock und lass diesen sich im Falle eines Falles bemerkbar machen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 08.11.2005, 15:29    Titel: Antworten mit Zitat

wie mach ich das?
OK, ich hab jetzt herausgefunden:
CPP:
   cLog::GetInstance() << LOGI("Bild drehen");
   byte* newdata=new byte[width*height*4];
   for(unsigned int i=0; i<height; ++i)
   {
      memcpy(newdata+i*width*bpp, data+(height-i)*width*bpp, width*bpp);
   }
   delete[] data;
   data=newdata;
   cLog::GetInstance() << LOGI("Bild gedreht");

Hier stürtzt das ab. Irgendwo. Nachdem der Aufruf ca. 25 mal funktioniert hat, auf den meisten Rechnern außer auf meinem und dem von Flyin Dragon und zwar nur im Releasebuild net in der Debug version.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dr. Best
Senior JLI'ler


Alter: 35
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 08.11.2005, 16:56    Titel: Antworten mit Zitat

Ist vielleicht irgendein Memoryleak drin?
Kannst ja einfach mal im Taskmanager schauen ob das Programm seinen RAM bedarf bis es zum Absturz kommt auf 450 MB oder so hochschraubt Wink .
_________________

Ich bin da, wer noch?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 08.11.2005, 17:04    Titel: Antworten mit Zitat

Ok, so siehts aus:
CPP:
//da das bild am kopf steht, muss es gedreht wreden:
         try
         {
            byte* newdata=new byte[width*height*4];
               for(unsigned int i=0; i<height; ++i)
               {
                  if(!newdata)
                     cLog::GetInstance() << LOGE("newdata=)NULL");
                  if(!data)
                     cLog::GetInstance() << LOGE("data==NULL");
                  memcpy(newdata+i*width*bpp, data+(height-i)*width*bpp, width*bpp);
               }
               delete[] data;
               data=newdata;
         }
         catch(...)
         {
            cLog::GetInstance() << LOGE("Exception, Bild konnte nicht rotiert werden!" << path);
         }

Die Exception wir bei "VorneLinks9.tga" geworfen, das ist eine von ca. 200 Anmationsdatein. Und zwar nur bei dieser Datei. Ich hab die...8 kopiert und in ...9 umbenannt, da kam imemr noch der Fehelr, ewswegenn es net an der Datei liegen kann, was ja auch unlogisch wäre da es in der Debug ja funktioniert. Außerdem tritt der Fehler ja nur in ca. 80% aller Rechner auf (bis jetzt läufts auf zweien perfekt). Schon seltsam das eine Stelle 199 mal funktioniert und einmal nciht, zumal das einmal nicht irgendwo in der Mitte liegt.
Das ist wohl ein sehr seltsammes Problem, ka was ich noch machen soll.
Achja, es stürzt net mehr ab, die Exception wird geworfen, das Bild net gedreht, es entsteht warhschienlich ein MemoryLeak (wegen newdata, aber es ist wohl nurn n paar kb groß), sonst passiert halt nix. In der Animation sieht man halt ienmal n Bild das am Kopf steht, aber es läut ansonsten alles.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 08.11.2005, 18:04    Titel: Antworten mit Zitat

Hmm...kannst du mal so einen ungefähren Vergleich von den Spezifikationen der Rechner posten?
Waren die beiden, auf denen es funktioniert hat, besonders gut (im Vergleich zu den anderen)? Vielleicht ist es wirklich ein Speicherproblem, das auf den beiden Rechnern eben durch Speicher im Überschuss/sonst irgendwas umgangen werden konnte...
Ich würd wirklich mal alle Stellen kontrollieren, wo viel Speicher belegt werden könnte(z.B. Schleifen oder Initialisierungen/Deinitialisierung? von DX) Wink
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 08.11.2005, 18:27    Titel: Antworten mit Zitat

ja, nur gegen den Speicherverbrauch steht halt das irgendwo in der Mitte der Fehler auftritt, und danach ja wohl wieder Speicher zur verfügung steht. Vielleicht die Exception noch weiter austesten, was das fürn Typ ist. Nur hab ich davon kein Plan Wink.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 08.11.2005, 20:29    Titel: Antworten mit Zitat

Hmm...aber wenn der Fehler in der Mitte auftritt, d.h. (angenommen meine These stimmt) irgendwo ab der Mitte des Programms gibts keinen Speicher mehr. Dann brauchst du nur versuchen, auf neuen Speicher zuzugreifen und da hast du den Salat(=Access Violation). Dann sollte doch egal sein, ob danach wieder Speicher zur Verfügung steht oder nicht.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum