Seltsamer Bug
Übersicht

![]() |
FetzeBetreff: Seltsamer Bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Oder schreibe Debugausgaben in eine Datei .
Und ein Flag einbauen für DebugAnfang/Ende . ? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jupp so rum wäre der Aufruf richtig. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group