Seltsamer Bug

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Fetze

Betreff: Seltsamer Bug

BeitragSa, Okt 14, 2006 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe heute ein Weilchen an meinem Projekt StarTrade gearbeitet, als ich plötzllich auf einen nicht weiter identifizierbaren Bug stieß, der auftritt, sobald ich per Entwicklertaste weitere Raumschiffe erstelle: Unhandled Memory Exception.
An sich wäre das kein Problem. Warum es doch eins ist: Der Fehler tritt ausschließlich in der Release-Version - also ohne Debugmode - auf, weshalb er unmöglich zu identifizieren ist. Ich habe im gesamten Code nicht ein einziges Mal "?Debug" oder "?Release" geschrieben, daher kann es *eigentlich* nicht am Spiel selbst liegen. Muss es aber, denn in der letzten Version funktionierte noch alles und sie lässt sich auch jetzt noch fehlerfrei starten.

Hat jemand eine Erklärung dafür oder schoneinmal ein ähnliches Problem gehabt? Wieso tritt der Fehler im Debugmodus nicht auf, wieso nur im Releasemodus? Irgendwelche Ideen oder Ansätze?


Edit: Ich bin mit einem Vergleichsprogramm alle Dateien durchgegangen und habe mir alle Änderungen von der funktionierenden zur jetzigen ST-Version angesehen... da ist absolut *nichts* dabei, was den Fehler offensichtlich auslösen könnte. Wenn jetzt niemand eine Ahnung hat, wie ich den Fehler auch im Debugmodes bekomme, dann bin ich völlig aufgeschmissen.

Markus2

BeitragSa, Okt 14, 2006 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast den Teil doch schon eingegrenzt !?

Code: [AUSKLAPPEN]

... der auftritt, sobald ich per Entwicklertaste weitere Raumschiffe erstelle: Unhandled Memory Exception.


Nim Teile des Quelltextes heraus bis der Fehler nicht mehr auftritt .
REM
ENDREM

Oder schreibe Debugausgaben in eine Datei .
Und ein Flag einbauen für DebugAnfang/Ende .

Fetze

BeitragSa, Okt 14, 2006 16:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Oder schreibe Debugausgaben in eine Datei .
Und ein Flag einbauen für DebugAnfang/Ende .


?
 

Dreamora

BeitragSa, Okt 14, 2006 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Const debug = true / false


If debug
debugfile.WriteString("Debug " + irgendeinText:string)
endif


sowas in der art meinte er.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Fetze

BeitragSa, Okt 14, 2006 16:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso.

Ich habe jetzt Print verwendet und konnte den Fehler eingrenzen. Mir ist noch immer nicht ersichtlich, wieso er auftritt, jedoch konnte ich ihn umgehen und so "beheben". Es lag daran, dass ich Functions innerhalb einer Methode verwendete, was ästhetisch ein wenig schöner war. Das seltsame daran: Seit der funktionierenden Version habe ich weder an der Methode noch an den darin stehenden Functions *irgendeine* Änderung vorgenommen.

Functions in Functions / Methoden scheinen tickende Zeitbomben zu sein...
 

Dreamora

BeitragSa, Okt 14, 2006 17:00
Antworten mit Zitat
Benutzer-Profile anzeigen
ich weiss jetzt nicht ob ich dich richtig verstehe. Aber wenn du das gemacht hast, was ich vermute, dann bist du über einen Compilerbug gestolpert, der in der nächsten Version behoben ist.

Und zwar ist folgender Code zb hat einige elementare Fehler drin:

Code: [AUSKLAPPEN]

Type TTest

   Field value:Int = 10
   Method mTest()
      Print "Test Methode"
   End Method
   
   Method fTest()
      functionTest()         ' Das ist auch korrekt
   End Method
   
   Function functionTest()
      Print "Test Function"
   End Function
   
   Method tTest()
      ftTest()
   End Method
   
   Function ftTest()
      Print "Test Wert: " + value   ' Dies ist inkorrekt, denn die Funktion hat keine Type Instanzen, sofern nicht übergeben!
   End Function
End Type


Global test:ttest = New ttest

test.mTest()      ' Das ist korrekt
test.fTest()      ' Auch das ist korrekt
test.tTest()      ' Auch das ist korrekt

test.functionTest()   ' Inkorrekt. Funktionen sind Type Scope, nicht instanzen scope!
test.ftTest()      ' Inkorrekt. Funktionen sind Type Scope, nicht instanzen scope!



Das Problem ist, wegen eines aktuellen Bugs im Compiler würde test.ftTest() tatsächlich funktionieren, obwohl dort ein Null Referenz fehler kommen müsste, da eine Funktion, egal ob auf einem Type oder nicht, kein Self besitzt und value ohne eine Type Referenz auf Self zugreift.

Der Fehler ist intern schon behoben, nur müssen wir noch auf die nächste Majorversion warten bis wir ihn auch haben.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Fetze

BeitragSa, Okt 14, 2006 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Aaahhh.. okay, das wird es sein. Ich habe zwar extra darauf geachtet, Self als Parameter zu übergeben, auf den ich dann explizit zugreife, aber möglicherweise hatte sich auf ähnlichem Weg ein anderer Bug eingeschlichen.

Markus2

BeitragSa, Okt 14, 2006 17:08
Antworten mit Zitat
Benutzer-Profile anzeigen
So wäre es also richtig
Code: [AUSKLAPPEN]


Global test:ttest = New ttest

test.mTest()      ' Das ist korrekt
test.fTest()      ' Auch das ist korrekt
test.tTest()      ' Auch das ist korrekt

ttest.functionTest()
ttest.ftTest()



und Value in ftTest macht keinen Sinn ... wie oben erwähnt
 

Dreamora

BeitragSa, Okt 14, 2006 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Jupp so rum wäre der Aufruf richtig.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group