(SDL) Was soll ich tun, wenn ich den Fehler nicht finde?
-
Ich habe ein SDL-Programm soweit geschrieben, dass es mir ein Fenster mit blauem "Screen" darstellen sollte, dass sich schließt, sobald man Escape drückt.
Leider Funktioniert das Programm nur , wenn ich die Grafikfunktionen auskommentiere (=> schwarzer screen). Sonst startet es zwar, bricht aber bei den entsprechenden Funktionen (z.B. SDL_Fillrect(...)) ab.In den auskommentierten Funktionen selbst kann der Fehler nicht liegen, da ich sie aus einem anderen Code, den ich Fehlerfrei kompilieren konnte kopiert habe. Der einzige Unterschied, der mir bisher aufgefallen ist, ist dass das fehlerhafte Programm aus mehreren Dateien besteht und der screen nicht global deklariert ist.
Was macht man in so einem Fall (wenn man keine Ahnung hat, wo der Fehler liegt)?
Kennt ihr ein Forum, was sich noch eher auf Programmierung von SDL spezialisiert hat?
Der Code hat jetzt ca. 200 Zeilen. Wenn sich jemand bereiterklären würde sich den mal anzugucken wär ich begeistert.
(Mir ist schon klar, dass ich nicht davon ausgehen darf.)
http://rapidshare.de/files/38036171/das_problem.zip.htmlVieleicht kommt das Problem ja auch jemandem bekannt vor, obwohl es so vage beschrieben ist.
-
probier mal das "||" bei den flags (double buffer und so) gegen ein "|" zu tauschen. im konstruktor von "Spiel". das ist nämlich schonmal sicher falsch.
-
Da ich mir den Quelltext nicht angeschaut habe, kann ich nur allgemeines dazu sagen.
Mögliche Fehlersuche:
1.) Identifiziere welche Quelltextzeilen in der Hauptdatei, welche die main(int argc, char argv)** Funktion enthält, den Fehler verursachen.
2.) Identifiziere die Funktionen / Klassen welche den Fehler provozieren.
3.) Führe eine sorgfältige Untersuchung der Funktionen durch. Wurden alle benötigten Eingaben der Funktion richtig initialisiert ? Was sind die Resultate der Funktion ? Diese Untersuchung kann man mittels Tests sowie einem Code-Review machen.
Es sieht so aus, als ob dein Grafikfenster nicht richtig initialisiert wurde. Als ich mein erstes DirectX Programm schrieb, hatte ich nämlich den gleichen Fehler. Ich behob diesen indem ich die Beispiel zu DirectX anschaute und dies dann als Grundlagen für mein Programm nahm. Wenn das Grafikfenster nämlich nicht initialisiert wurde, kann eine nachfolgende Zeichenoperation zu einem schwarzen Bildschirm, oder im schlimmsten Fall zu Absturz führen.
-
obbba schrieb:
Was macht man in so einem Fall (wenn man keine Ahnung hat, wo der Fehler liegt)?
du stepst mit dem Debugger durch. Wenn du nicht weisst, was sein Debugger ist, wirds sowieso Zeit, das zu lernen. Du kannst damit dein Programm Zeile fuer Zeile ablaufen lassen und dir dann anschauen was fuer Werte deine Variablen haben. Oder du laesst das ganze Programm im Debugger durchlaufen und abstuerzen und schaust dir nachher die Werte der Variablen zu dem Zeitpunkt an, an dem es geknallt hat.
Tutorials zum Debugger deiner Wahl (normalerweise hast du einen bei deiner IDE dabei) findest du mit Google

-
Hallo
Blue-Tiger schrieb:
Tutorials zum Debugger deiner Wahl (normalerweise hast du einen bei deiner IDE dabei) findest du mit Google

oder hier im Forum, wenn du mit VS arbeitest.
chrische
-
ich hab seit ich den laptop benutze eclipse+cdt drauf, aber das spinnt immer mal wieder (z.b. funzt der debugger nicht: "error launching failed"->sehr aussagekräftig). ich probier mal den debugger vom dev+c++.
Ein problem ist, dass ich kein Konsolenprogramm schreibe, wie normal immer. Das heißt, dass ich mit bibliotheken arbeite.am || statt | hats leider nicht gelegen. Die letzte nachricht in stdcerr.txt ist immernoch "vor fillrect" daraus schließe ich dass ich irgendwas vergessen habe, was man zu Vorbereitung von SDL_Fillrect() braucht.
Wie findet ihr die "Modularisierung"?