Programm/Spiel stürzt irgendwann ab
-
Hi,
ich habe ein spiel mit openGL in c++ programmiert. imo glaube ich auch nicht das der fehler irgendwas mit openGL zutun hat, deshalb poste ich es hier.
nun das problem ist, dass das spiel scheinbar nach einer gewissen, aber schwankenden zeit (so etwa nach 10-15 minuten) abstüzt. auf der shell bekomme ich folgendes :
--- average time per frame: 0.003096l seconds fps: 300 --- X Error of failed request: BadMatch (invalid parameter attributes) Major opcode of failed request: 42 (X_SetInputFocus) Serial number of failed request: 166466 Current serial number in output stream: 166474die erste zeile ist noch meine fps ausgabe aus dem spiel. leider kann ich überhaupt nix mit der fehlermeldung anfangen und habe auch nicht den hauch einer ahnung wo mein fehler liegen könnte. google hilft leider auch bisher nicht weiter.
aufgefallen ist mir bisher nur, dass die beiden nummern aus den letzten zeilen immer so zwischen 15000-17000 liegt...
so habt ihr eine ahnung in welcher richtung mein problem liegt, oder zumindest was diese fehler bedeuten?
danke schonmal für eure hilfe.
-
In diesem Forum sitzen eher selten Astrologen. Also bring wenigstens etwas Code oder grenze den Fehler vielleicht erstmal selber ein.
Hint: Debugger
Da der X11 Fehler überhaupt nichts aussagt kann man deinen Thread so zusammenfassen:
"Mein Programm funktioniert nicht! Wo ist der Fehler?" - Unzureichend, oder?
-
genau das ist doch mein problem...
ich habe ka wo der fehler liegt noch was sie bedeuten. und soll ich jetzt 10000 zeilen code hier reinposten?
und mein programm funktioniert, nur stürzt halt irgendwann ab. und ich bezweifle das ich das problem über einen debugger finde...
-
Vischnu schrieb:
ich bezweifle das ich das problem über einen debugger finde...
Tolle Einstellung.

In der Fehlermeldung steht doch ein Funktionsname und was von ungültigen Parametern. Wieso setzt du nicht mal da an? Bau dir ein paar Debug-Ausgaben und Assertions und überprüfe mal, ob und wann und wieso da falsche Argumente übergeben werden.
-
_matze schrieb:
Vischnu schrieb:
ich bezweifle das ich das problem über einen debugger finde...
Tolle Einstellung.

In der Fehlermeldung steht doch ein Funktionsname und was von ungültigen Parametern. Wieso setzt du nicht mal da an? Bau dir ein paar Debug-Ausgaben und Assertions und überprüfe mal, ob und wann und wieso da falsche Argumente übergeben werden.
Das ist die Fehlermeldung des X-Servers für irgendein Unix derivat (Linux?)
Das sagt rein gar nichts über den eigendlichen Fehler aus und diese Funktion gibt es in SEINEM Programm mit Sciherheit auch nicht.
@Vischnu. Nimm einen Debugger und schau an welcher Stelle es Abstürzt! Zudem sind 1000 Zielen nicht viel. Da kommst du wahrscheinlich auch mit normalen Konsolenoutput weiter. Lass dir an geeigneten Stellen was ausgeben und je nach dem was rauskommt, respektive auch nicht, kannst du sehen wo das Problem liegt und hier posten!
-
Da der Xserver meckert leigt es möglichweise tatsächlich an deinem Renderpath. Reduziere den aufs absolute Minimum. Aber vergiss nicht auch mit dem Debugger zu arbeiten!! (zB gdb)
-
neil, danke für deine hilfe, aber vieles was du hier schreibst sagt mir gar nicht (renderpath?)
das seltsame ist halt, dass das programm nicht an irgendeiner bestimmten stelle abstürzt. es also eine falsche anweisung gibt, an der es immer hängen bleibt, die man einfach debuggen könnte...
z.b ich habe eine spiel-ende animation, bei der die kamera um ein model kreist. diese 10-20 zeilen code funktionieren soweit tadellos , aber irgendwann nach so 10-15 min machts halt einfach peng. so nun dachte ich, das problem liegt in meiner spiel-ende animation, aber nun ist mir mein spiel mit dem selben fehler auch im "hauptprogramm" abgestürzt.
und genau deswegen meinte ich, das ich mit dme debugger wohl nicht weiterkomme, da jede anweisung in meinem programm mehrfach schon durchlaufen ist und keine fehler gibt. nur halt nach dem ka 50.000 durchlauf oder so scheint irgendwas nicht mehr zu stimmen....übrigens schrieb ich 10000 zeilen code nicht 1000!
-
Vielleicht ein Speicherleck?
-
Bestimmte Umstände können auch nen Crash verursachen

Z.B. dass ein Index 49999 mal OK ist, aber beim 50000 Durchlauf nen Wert hat, der den Absturz verursacht.
Kompilier deine Anwendung mit dem Flag "-ggdb", dann sind da drinnen Debug-Symbole.
Jetzt lässt du deine Anwendung laufen. Wenn es crasht solltest du sehen an welcher Stelle das war UND welche Wert z.B. gerade an die Funktion übergeben wurden. Dann setzt du für die Funktion nen Breakpoint, setzt die gegebenen Werte für die Parameter als Condition, lässt nochmal laufen. Bei erreichen dann weiter steppen, bis du den Fehler findest...Es kann natürlich auch sein dass da ein Bug in der Engine ist. Welche verwendest du denn? Oder hast du das ganze Rendering selber implementiert...
Wenn du ABSOLUT SICHER bist (k.A. ob das bei 10000 Zeilen überhaupt geht :P), bleibt bloß noch Arbeitsspeicher oder Grafikkarte defekt

-
Ich meinte die Funktion die dir deine Sachen auf den Bildschirm malt! paintGL oder drawScene oder sowas in der Art ...

Und was habe ich noch gesagt, was du nicht verstehst? Die Fehlermeldung lässt vermuten dass du zB Linux benutzt. Richtig oder? Deswegen beschreibt sie das Problem nicht.
-
also ich benutze zuhause ubuntu, auf meinen beiden rechnern kam nun diese fehlermeldung.
habs jetzt auf einem suse rechner getestet, dort lief es 3/4h ohne absturz. -.-
desweiteren nutze ich das GLFW openGl framework. dort kann man auch ein beispiel programm runterladen, das lief bei mir auch bisher ohne diesen fehler.bin im moment echt etwas ratlos... werde wohl das mit dem debuggen mal probieren.