 |
JLI Spieleprogrammierung
|
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
|
Verfasst am: 07.11.2005, 21:08 Titel: Release Version will nicht funktionieren |
|
|
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 |
|
 |
abc_d JLI Master Trainee

Alter: 35 Anmeldedatum: 27.01.2003 Beiträge: 615
Medaillen: Keine
|
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 07.11.2005, 21:31 Titel: |
|
|
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 |
|
 |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 08.11.2005, 12:10 Titel: |
|
|
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 |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 08.11.2005, 14:13 Titel: |
|
|
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 |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 08.11.2005, 14:55 Titel: |
|
|
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 |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 08.11.2005, 15:22 Titel: |
|
|
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 |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 08.11.2005, 15:29 Titel: |
|
|
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 |
|
 |
Dr. Best Senior JLI'ler

Alter: 35 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 08.11.2005, 16:56 Titel: |
|
|
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 . _________________
Ich bin da, wer noch? |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 08.11.2005, 17:04 Titel: |
|
|
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 |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 08.11.2005, 18:04 Titel: |
|
|
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)  _________________ 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 |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 08.11.2005, 18:27 Titel: |
|
|
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 . _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 08.11.2005, 20:29 Titel: |
|
|
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 |
|
 |
|
|
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
|