Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Heftiger BUG!! (FBC 0.23)
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 30.11.2011, 16:05    Titel: Heftiger BUG!! (FBC 0.23) Antworten mit Zitat

Hallo zusammen,

ich arbeite zur Zeit mit dem FB-Compiler 0.23 unter Windows 7 (64Bit-Version). Wenn ich folgenden Code compiliere und ausführe wächst der Speicherverbrauch unaufhaltsam bis zum exodus:

Code:

function testen1(event as string) as integer
    select case event
    case "click"
        print "click"
        return 1
    case "dblclick"
        print "dblclick"
        return 1
    end select
    return 0
end function

dim r as integer

do
    r=testen1("click")
loop until inkey <> ""


Meiner Meinung nach ist das ein Bug, ist noch jemand der Ansicht? Oder sehe ich einen entscheidenden Fehler in der Programmierung grade nicht?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 30.11.2011, 16:33    Titel: Antworten mit Zitat

wie sieht es aus, wenn du es mit
Code:
function testen1(byref event as string) as integer

compilierst?


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 30.11.2011, 16:44    Titel: Antworten mit Zitat

@TPM: Das selbe verhalten .. Der Speicher wächst weiter.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
isiprimax



Anmeldungsdatum: 02.01.2009
Beiträge: 77

BeitragVerfasst am: 30.11.2011, 18:03    Titel: Antworten mit Zitat

Mit Version 0.22 lässt sich das selbe Verhalten reproduzieren.

Bei diesem Code wächst der Speicher nicht an.

Code:
function testen1(ByRef event as string) as integer
   Dim x As Integer = 0
   Select case event
      case "click"
         print "click"
         x =1
      case "dblclick"
         print "dblclick"
         x =1
   End select
   Return x
end function

dim r as integer

do
   r = testen1("click")
Loop until inkey <> ""
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
darkinsanity
aka sts


Anmeldungsdatum: 01.11.2006
Beiträge: 456

BeitragVerfasst am: 30.11.2011, 18:09    Titel: Antworten mit Zitat

Ok, habs auch mal ausprobiert (gleiches OS und gleicher Compiler wie du).
Zuerst dachte ich, es läge irgendwie an den print-Aufrufen. Als ich die aber auskommentiert hab, stieg der Speicher bedeutend schneller.
Da print ja auf die Konsole zugreift wird das vermutlich das Programm verlangsamt haben, ungebremst verschleudert es seinen Speicher schneller.

Der Code lässt sich übrigens weiter kürzen:
Code:
function testen1(event as string) as integer
    select case event
    case "click"
        return 1
    end select
end function

dim r as integer

do
    r=testen1("click")
loop until inkey <> ""

Wenn man "return 1" auskommentiert (oder entfernt und anderen Code einsetzt), tritt das Phänomen nicht auf.

/edit:
Hab mal mit "fbc -R" compiliert (einmal mit "return 1", einmal ohne) und die Ergebnisse durch "diff" gejagt:
Zitat:
3c3
< #test.bas' compilation started at 17:15:39 (FreeBASIC 0.23.0)
---
> #test.bas' compilation started at 17:15:55 (FreeBASIC 0.23.0)
34,35d33
< mov dword ptr [ebp-4], 1
< jmp .Lt_0005
100c98
< #test.bas' compilation took 0.0003375685829816177 secs
---
> #test.bas' compilation took 0.003835448113370887 secs

_________________
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst -- Steve Wozniak


Zuletzt bearbeitet von darkinsanity am 30.11.2011, 18:21, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
isiprimax



Anmeldungsdatum: 02.01.2009
Beiträge: 77

BeitragVerfasst am: 30.11.2011, 18:17    Titel: Antworten mit Zitat

Denke eher hat was mit Select Case zu tun. Welches mit einem Return frühzeitig beendet wird und nichtmehr aus dem Speicher entfernt wird.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
darkinsanity
aka sts


Anmeldungsdatum: 01.11.2006
Beiträge: 456

BeitragVerfasst am: 30.11.2011, 18:25    Titel: Antworten mit Zitat

isiprimax hat Folgendes geschrieben:
Denke eher hat was mit Select Case zu tun. Welches mit einem Return frühzeitig beendet wird und nichtmehr aus dem Speicher entfernt wird.

Es Select Case muss nicht aus dem Speicher entfernt werden (wäre ja dann ne Wegwerf-Funktion).
Wenn man innerhalb von select case return benutzt, müssen alle Variablen, die innerhalb des Kontexts von select case und der Funktion deklariert wurden, vom Stack genommen werden. Das passiert hier bei ".Lt_0005", mit return wird auch dahin gesprungen, ohne return erreicht die Ausführung diesen Punkt sowieso.

/edit:
Ich glaube ich hab da was:
Code:
call _fb_StrCompare@16
test eax, eax
jne .Lt_0008
.Lt_000A:
mov dword ptr [ebp-4], 1
jmp .Lt_0005
.Lt_0008:
.Lt_0006:
lea eax, [ebp-16]
push eax
call _fb_StrDelete@4
.Lt_0005:


Springt er hier nicht einfach an _fb_StrDelete@4 vorbei und vergisst damit den String aus dem Speicher zu nehmen?

/edit2:
Verdacht hat sich scheinbar bestätigt. Hab grad mal mit einem Programm in den Speicher des Prozesses geguckt und siehe da: Er ist randvoll gefüllt mit "click".
Ich reporte das Ding mal. (erledigt)
_________________
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst -- Steve Wozniak
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 30.11.2011, 23:42    Titel: Antworten mit Zitat

@darkinsanity: wow.. hast das echt als bug gemeldet? .. sonst hätt ich das noch gemacht happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
darkinsanity
aka sts


Anmeldungsdatum: 01.11.2006
Beiträge: 456

BeitragVerfasst am: 01.12.2011, 00:31    Titel: Antworten mit Zitat

Jep, hab den Bug schon gemeldet, mit Beispielcode und dem ASM-Code. Hab ihm mal die Priorität 8 gegeben, ist ja schon ein gemeiner Bug zwinkern
_________________
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst -- Steve Wozniak
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 01.12.2011, 10:15    Titel: Antworten mit Zitat

Der Speicherüberlauf tritt übrigens auch auf, wenn man statt "return" mit "goto" oder "exit function" aus der select-bedingung rausspringt - Ziemlich nervig :-/ .. hoffe da kommt bald ne neue version..

Auf jeden Fall vielen Dank @darkintensity lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 01.12.2011, 11:05    Titel: Antworten mit Zitat

Naja, mit GOTO aus einer Funktion rauszuspringen ist auch keine wirklich gute Idee, unabhängig von Bugs im Compiler.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
darkinsanity
aka sts


Anmeldungsdatum: 01.11.2006
Beiträge: 456

BeitragVerfasst am: 31.12.2011, 03:57    Titel: Antworten mit Zitat

So, ein kleines Update:
Der Bug wurde gestern von dkl behoben.
Da es offenbar Bedarf gibt, hab ich die aktuelle git-Version des fbc mal kompiliert und einen Patch daraus gemacht. Ich garantiere euch nicht, dass das bei euch funktioniert, vor allem da ich selbst ein paar kleine Änderungen gemacht habe, ohne die es mein mingw nicht kompilieren wollte.
Einfach über eine bestehende Installation der Windows-Version drüberklatschen und fertig.
Ich hab das auch gleich bei mir getestet, der memory-leak ist weg.


/edit: Patch geupdated.
_________________
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst -- Steve Wozniak
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kernelpanic



Anmeldungsdatum: 25.01.2012
Beiträge: 16

BeitragVerfasst am: 28.01.2012, 12:19    Titel: Antworten mit Zitat

darkinsanity hat Folgendes geschrieben:
So, ein kleines Update:
Der Bug wurde gestern von dkl behoben.


Hallo,

ich habe gestern FreeBASIC heruntergeladen und installiert. Ist der Fehler darin schon behoben?

Gruß
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 28.01.2012, 12:29    Titel: Antworten mit Zitat

Nein, der aktuelle Compiler ist schon etwas älter. Wenn du eine Version mit dem Patch haben willst, dann kannst du den Patch von darkinsanity nehmen oder im FreeBASIC-Portal die Git-Version ziehen (siehe "Übergangslösung").
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
kawe



Anmeldungsdatum: 25.03.2012
Beiträge: 41

BeitragVerfasst am: 25.03.2012, 14:36    Titel: Antworten mit Zitat

Hallo,
ich bin ganz neu hier, eigentlich Java-Entwickler und wurde (erneut) auf FreeBasic aufmerksam, als ich von den neuen OO-Features gehört habe.
Bei meinen Gehversuchen mit FreeBasic bin ich leider auch recht schnell in diesen Select-Case-Meory-Leak-Bug getreten ...
Nun zu meiner eigentlichen (Anfänger-)Frage:
Gibt es denn für die letzte Nicht-OO-Version (0.23) wirklich keine Release-Updates mehr?
So sehr ich die OO-Erweiterungen begrüße, so sehr bin ich mir im Klaren darüber, dass diese in jeder Hinsicht eine enorme Erweiterung darstellen, die viele neue Probleme bringen wird und z.B. auch die Compilezeiten/Speicheranforderungen erhöhen wird!?

Hat man wirklich nur die Wahl zwischen einer Alpha-Version, einer Version mit (schwerem) Bug und selber kompilieren? Das würde meine gerade aufgekommene Euphorie für FreeBasic doch dämpfen, geschockt.

Der Patch von darkinsanity funktioniert bei mir übrigens nicht, oder zumindest nicht wie die ungepatchte Version, traurig.

Egal welche Quelldatei ich kompiliere bekomme ich damit Path Errors, z.B.:

C:\Programme\FreeBASIC\FbEdit\..\fbc -s console "(Untitled).bas"
C:\Programme\FreeBASIC\bin\ld.exe: cannot find -lgcc_eh

mit dem Originaltestcode aus diesem Thread
oder (beim Beispielprojekt aus dem unveränderten FBEdit):

C:\Programme\FreeBASIP\FbEdit\..\fbc -s gui "DialogApp.Bas" "DialogApp.Rc"
DialogApp.Bas(10) error 23: File not found, "windows.bi" in '#include once "windows.bi"'

mit dem Beispielprojekt aus dem unveränderten Beispielprojekt aus dem aktuellen FBEdit ...

Mit der ungepatchten Version funktioniert's ...

Ach ja, OS hier WinXP SP3, sollte ja aber (hoffentlich) keine Rolle spielen?

Irgendwelche Ideen?

LG
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 25.03.2012, 15:19    Titel: Antworten mit Zitat

Willkommen im Forum.

Ich glaube, hier liegen noch ein Paar Wissenslücken über FB vor, die ich mal versuche zu klären:

0.23 bringt auch schon OOP-Features mit, zur neuen 0.24 Version kommt jetzt Vererbung dazu. Alles in allem noch nicht vergleichbar mit Java oder C++, aber doch schon einige Ansätze, die in Zukunft wohl noch ausgebaut werden (virtuelle Methoden etc.).

Der Select-Case-Bug ist natürlich doof, aber so ist das nunmal in der Softwareentwicklung. Der Bug ist im Repo bereits gefixt. Release-Updates wird es wohl nicht geben, solche Updates hatte FB nur ein Paar mal und das nur bei wirklich schweren Bugs. Für gewöhnlich gibt es einfach eine neue Version. Wenn du in der neuen Version die neuen Features nicht nutzt, wirst du aber auch keine längeren Compilezeiten oder größere Speicheranforderungen haben. Einzig die Binärdateien werden etwas größer sein. FB liefert hier aber vergleichsweise gute Werte, also kein Problem.

Was du als Alpha-Version meinst, weiß ich nicht, Alpha ist da gar nichts mehr und der Zusatz Beta ist seit 0.21 nicht mehr dabei. Laut (vorläufigem) Plan, soll 0.24 Ende März, Mitte April rauskommen, das kann sich natürlich verschieben, wir sind bei einem Open Source Projekt ohne bezahlte Entwickler.

Selbstcompilieren musst du nicht zwingend, in meinem vorherigen Post hab ich aktuelle Builds verlinkt, die wir im Portal zur Verfügung stellen.

Nur den Patch einspielen reicht nicht, da die momentanen Git-Builds eine andere GCC-Version nutzen und deswegen im alten FBC einige Libs fehlen (daher dein Linker-Fehler).

Das Problem mit den Includes ergibt sich daher, da zur neuen Version der Include-Ordner im FB-Verzeichnis umbenannt wurde. Der Compiler findet in der alten Ordnerstruktur seine Dateien einfach nicht mehr.

Die Downloads im Portal bringen alles mit und sind sofort lauffähig. Du kannst in deinem FBEdit einfach die Pfade auf diese Version ändern und alles sollte laufen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 25.03.2012, 15:39    Titel: Antworten mit Zitat

MOD hat Folgendes geschrieben:
Die Downloads im Portal bringen alles mit

also die Git-Version, die man compiliert auch schön übersichtlich hier finden kann, nicht die als aktuelle Version gekennzeichnete letzte stable.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
darkinsanity
aka sts


Anmeldungsdatum: 01.11.2006
Beiträge: 456

BeitragVerfasst am: 26.03.2012, 02:37    Titel: Antworten mit Zitat

Von der Nutzung meines Patches rate ich mittlerweile auch ab. Bei mir lief er zwar, aber irgendwie hat es da wohl Probleme gegeben, obwohl ich auch die benötigten libs dazukopiert habe.
Ich empfehle dem Link von nemored zu folgen und die fbc-Version von dort zu laden.
_________________
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst -- Steve Wozniak
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
kawe



Anmeldungsdatum: 25.03.2012
Beiträge: 41

BeitragVerfasst am: 29.03.2012, 00:45    Titel: Antworten mit Zitat

Hallo nochmal,

vielen Dank erstmal für die freundliche Aufnahme im Forum, und die vielen Antworten. Es tut mir leid, dass ich erst jetzt nochmal antworte, aber es ging einfach nicht früher.
Das wichtigste zuerst: Ja, das aktuelle 0.24-Prerelease habe ich gefunden, ausprobiert, und es funktioniert erstmal einwandfrei.
Zum zweiten:
ich bin ja gerade auf der Suche nach einer Programmiersprache, die schlank und elegant ist, auch auf leistungsschwachen Rechner sinnvoll einsetzbar ist und ebenso für die "Schnelle" als auch für größere Projekte taugt.
Schon seit einer Weile fiel mir da FreeBasic ins Auge, da es für mich wirklich die besten Seiten von C und BASIC zusammenführt.
Zu meinen letzten Aussagen:
Mir ist natürlich nicht entgangen, dass FreeBasic bereits viele Sprachelemente einer OO-Sprache mitliefert. Und eigentlich tut das ja selbst bereits C (ohne ++), wenn man genauer hinsieht.
Und ich weiß auch wirklich, die daraus resultierenden Vorteile der Code-Kapselung zu schätzen.
Dennoch beginnt für mich echte Objektorientiertheit erst mit dem Polymorphismus und den daraus resultierenden Möglichkeiten zur Abstraktion. Die Möglichkeit allein, Klassen mit Member und Methoden zu definieren ist für mich, bei aller Eleganz, nicht weniger, aber auch nicht mehr, als ein Weg zur Schaffung von Namensräumen.
Aber da hat, denke ich, jeder seine eigene Philosophie und außerdem geht es mir hier gar nicht um "das volle OO-Programm", sondern um eine "schöne", aber auch "unkomplizierte" Sprache. Die begonnene OO-Integration in Freebasic hat Hand und Fuß und ist nur noch eine Frage der Zeit.

Wenn ich das Prerelease 0.24 als "Alphaversion" bezeichnet habe, dann nur deshalb, weil seit der Version 0.23 sich allein die Paketgröße verdoppelt hat. Zumindest auf den ersten Blick ist also 50% des Codes neu. Jeder, der schon mal im validierten Umfeld gearbeitet hat, weiß, das man da zunächst davon ausgehen *muss*, dass die Version grundlegend neu -und damit ungetestet- ist. Und so finde ich mich nicht gerade selten in der Situation, dass auch ich eine 100%-ige zuverlässige, alte Version der neuen Version für lange Zeit vorziehe ...

Über die Interna von FreeBasic weiß ich in der Tat bisher gar nichts, und kann deshalb bisher auch nicht beurteilen, ob der Compiler so modular aufgebaut ist, dass die bisherigen Sprachfeatures robust gegen die Neuerungen sind. Aber es scheint ja wirklich so zu sein lächeln.

Jedenfalls vielen Dank nochmal für die hilfreichen Tips.
Ich freue mich schon auf die nächste Version.

lG
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 29.03.2012, 13:43    Titel: Antworten mit Zitat

Die Paketgröße sagt letztlich nichts über den Compiler aus. Es sind viele neue Header und Beispiele dazugekommen, dazu wurden die GCC-Libs aktualisiert. Gerade letzteres macht wohl viel aus. Die Libs, die der Compiler aber im Kern wirklich braucht, sind kaum gewachsen.

Mit Alpha meintest du also 0.24, das macht Sinn. Die 0.24 ist aber keineswegs offiziell, sondern einfach von uns als Service für die Portalsbesucher compiliert worden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
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.

 Impressum :: Datenschutz