GLScene mit Lazarus 2.3.0 und FPC 3.3.1

Rund um die LCL und andere Komponenten
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

GLScene mit Lazarus 2.3.0 und FPC 3.3.1

Beitrag von fliegermichl »

Hallo,

nachdem ich den kleinen Bug behoben habe, lässt sich GLScene mit o.g. Lazarus/FPC Version problemlos compilieren und auch installieren. Nach Neuerstellung der IDE startet Lazarus jedoch nicht mehr. Es erscheint kurz das Splash Fenster. Dann geht die CPU Last in dem Prozess auf 30 bis 32% hoch und zum Schluss erscheint eine Speicherzugriffsfehlermeldung.

Wie kann man dem am sinnvollsten auf den Grund gehen?

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: GLScene mit Lazarus 2.3.0 und FPC 3.3.1

Beitrag von wp_xyz »

Lass dir eine Log-Datei schreiben. Dazu startest du den neuen, fehlerhaften Lazarus mit dem Parameter --debug-log=<log-datei> wobei <log-datei> für den Namen der Log-Datei steht. (Wenn du Lazarus über das Programm startlazarus, startest bin ich allerdings nicht sicher, ob das an Lazarus weitergegeben wird --> probieren). In der Log-Datei findest du dann Meldungen für das, was Lazarus noch machen konnte/wollte, bis der Absturz kam.

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: GLScene mit Lazarus 2.3.0 und FPC 3.3.1

Beitrag von Soner »

Du musst du die Biblotheken(dll-/so-/dylib-Dateien) für die Zusätze in Lazarus-Ordner oder dahin wo es erreichbar ist kopieren. Das sind OpenAl, Physik oder irgengwelche andere Zusätze.
Jedenfalls hatte ich ähnlichen Fehler als ich es vor Jahren ausprobiert hatte. Versuch nur pure GLScene, ohne Zusätze.

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: GLScene mit Lazarus 2.3.0 und FPC 3.3.1

Beitrag von Soner »

Ich habe es jezt installiert, nur GLScene_DesignTime.lpk, es läuft wie damals. Also wie ich vermutet habe, muss dein Problem an den fehlenden Dlls liegen. Wenn du *_BASS.lpk, *_Newton.lpk o.ä. installierst musst du die dlls für Lazarus erreichbar machen.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: GLScene mit Lazarus 2.3.0 und FPC 3.3.1

Beitrag von fliegermichl »

Ich habe den Tip mit --debug-log=lazi.log befolgt.

Inhalt von lazi.log

Code: Alles auswählen

using config file C:\Users\michael\development\trunk\lazarus\lazarus.cfg
[FORMS.PP] ExceptionOccurred 
  Sender=EAccessViolation
  Exception=Access violation
  Stack trace:
  $00000000015B61B0
  $00000001000420D3  CREATENEW,  line 2081 of include/customform.inc
  $0000000100C6C8E4  CREATE,  line 4764 of ../Source/GLContext.pas
  $0000000100C6C223  CREATESERVICECONTEXT,  line 4508 of ../Source/GLContext.pas
  $0000000100C6BFBE  ONAPPLICATIONIN
 
Die betreffende Zeile in customform.inc ist: (in einem case Statement)

Code: Alles auswählen

    adbDefault: FDoubleBuffered := TWSCustomFormClass(WidgetSetClass).GetDefaultDoubleBuffered;
 
Ich hab dann mit DebugLn eine Überprüfung ins Log schreiben lassen ob WidgetSetClass <> nil ist. Das ist der Fall.

Mit Lazarus 2.0.11 und FPC 3.2.0 läßt sich GLScene compilieren und auch problemlos verwenden.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: GLScene mit Lazarus 2.3.0 und FPC 3.3.1

Beitrag von Michl »

Habe es eben mal probiert und die Source von hier

Code: Alles auswählen

https://svn.code.sf.net/p/glscene/code/branches/GLSceneLCL
gezogen. Ist das die Version, die du auch benutzt?

Wenn ja, dann ist diese ganz schön kaputt. Ich musste erstmal alle Verzeichnisse anpassen. Dann konnte ich die IDE damit bauen. Wenn der Patch benötigt wird, kann ich den gern anfügen.

Um auf die Ausgangsfrage einzugehen, würde ich es etwas anders machen.
Zuerst würde ich die IDE selbst debuggen (die zu debuggende IDE mit Debuginformation bauen und von einer anderen IDE aus heraus debuggen). Das habe ich gemacht, komme letztlich auf das gleiche Ergebnis und stelle fest, daß zwar die WidgetSetClass gesetzt ist, jedoch nicht von TWSCustomFormClass abstammt. Somit knallt schon mal der Typecast.

Das Gute ist jetzt, daß bekannt ist, daß es einmal funktioniert hat. D.h. ich würde die Suche bei einer bekannten funktionierenden Version beginnen und die Revision heraussuchen, ab wann es nicht mehr geht, sprich die Revision per Annäherung heraussuchen.

Damit ich weiß, daß ich das nicht verbockt habe, habe ich das eben gemacht. Die letzte funktionierende Revision ist 63618. Sprich der Commit von dem Bugreport https://bugs.freepascal.org/view.php?id=37360 ist für das Problem verantwortlich. Da dies schon ein ähnliches Problem mit OpenGl ausgelöst hatte, würde ich versuchen die Lösung entsprechend zu suchen. Siehe dazu der Patch im Bugreport https://bugs.freepascal.org/view.php?id=37407#c124263
Evtl. reicht es den Code 1:1 zu übernehmen. Wenn nicht, hat man jetzt zumindest einen Ansatzpunkt, wo man Breakpoints setzen kann, um dem Problem mit dem Debugger auf den Grund zu gehen.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: GLScene mit Lazarus 2.3.0 und FPC 3.3.1

Beitrag von fliegermichl »

Erstmal vielen Dank für die Mühe, die du dir gemacht hast.

Der Typecast kann nicht funktionieren, da WidgetSetClass vom Typ TWSLCLComponentClass ist und das ist nicht kompatibel mit TWSCustomFormClass.

Lazarus mit Lazarus debuggen ist für mich ziemliches Neuland. Da brauch ich noch etwas mehr Zeit um mich da rein zu finden.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: GLScene mit Lazarus 2.3.0 und FPC 3.3.1

Beitrag von Michl »

Das ist eigentlich recht einfach. Du benötigst nur zwei mal Lazarus mit jeweils 32 oder 64 Bit. Am besten eine ähnliche Revision. Beide Lazarusversionen sollten eine Zweitinstallationen sein https://wiki.freepascal.org/Multiple_Lazarus/de.

Wenn du das hast, dann ist eigentlich schon der größte Teil getan. Jetzt musst du nur die zu debuggende IDE mit Debuginformation bauen. Für GDB hat sich als Debuginformation -gw2 als Beste erwiesen (z.B. nutze ich MainMenu -> Tools -> Configure "Build Lazarus" -> Options: -ghtlw2 -Criot -Sa).
Jetzt Lazarus neu kompilieren.

Jetzt hast du zwei IDEs, eine die debuggt werden soll (ich nenn sie mal DebugLazarus) und eine, die per GDB diese debuggen soll (NormalLazarus).

Du startest NormalLazarus und öffnest dort, ganz normal wie jedes andere Projekt, das Projekt ../DebugLazarusPath/ide/lazuarus.lpi.

Jetzt ganz wichtig! Unter MainMenu -> Run -> Run Parameters -> in Command line paramaters die Startparameter von der zu debuggende Zweitinstallation (DebugLazarus) eintragen (z.B. bei mir: --pcp=C:\64fpc320\LazTrunk\Config).

Das war es schon. Jetzt kannst du wie bei jedem anderen Projekt mit F9 die Zweitinstallation starten und debuggen.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: GLScene mit Lazarus 2.3.0 und FPC 3.3.1

Beitrag von fliegermichl »

Also Lazarus mit Lazarus debuggen klappt jetzt. Ich kann an der betreffenden Stelle einen Breakpoint setzen und der Debugger hält da auch an.
Ich hab jetzt vor dem case statement eingefügt:

Code: Alles auswählen

  s := WidgetsetClass.Classname;
  DebugLn('[TCustomform.CreateNew] WidgetsetClass is of type', s);
Dann crasht es in der Zeile s := WidgetsetClass.Classname;

Lasse ich den Umweg über die Variable s weg, dann macht die Zeile

Code: Alles auswählen

DebugLn('[TCustomform.CreateNew] WidgetsetClass is of type', WidgetsetClass.Classname);
gar nichts. Also es gibt weder einen Crash noch einen Eintrag im Logfile. Der Crash kommt dann in der nächsten Zeile case Application.Doublebuffered of
Irgendwie sehr mysteriös.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: GLScene mit Lazarus 2.3.0 und FPC 3.3.1

Beitrag von Michl »

Oh, habe es eben nochmal probiert und scheinbar habe ich dich aufs Glatteis geführt. Das funktioniert nur, wenn die einkompilierte Debuginfo an der gleichen Stelle ist. D.h. die IDE springt in die Zeile, die der Debugger meldet.

Lange Rede, kurzer Sinn, funktionieren tut es richtig wenn du zum Beispiel "NormalLazarus" vom gleichen Verzeichnis startest, wie "DebugLazarus". Du kannst z.B., bevor du das Package in die IDE einkompilierst, Lazarus.exe kopieren zu "LazarusNormal.exe" im gleichen Verzeichnis. Startest du nun LazarusNormal.exe ohne "StartLazarus" aber mit den gleichen Startparametern (z.B. bei mir: --pcp=C:\64fpc320\LazTrunk\Config) springt die IDE dann später beim debuggen an die richtige Stelle.

Ansonsten kann ich das letzte von dir geschilderte Problem nicht sehen.

Wenn du gar nicht weiter kommst, kann ich dem evtl. heute oder morgen Abend mal nachgehen. Ob's was bringt, kann ich nicht versprechen.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: GLScene mit Lazarus 2.3.0 und FPC 3.3.1

Beitrag von fliegermichl »

Danke für deine Geduld.

Leider klappt das auch nicht richtig. Ich hab die Lazarus.old.exe umbenannt zu Lazarus_ohne.exe (Das ist die Version in die GLScene noch nicht eincompiliert war)
Dann die Lazarus.lpi geöffnet. Bei Start -> Neu compilieren gab's erst mal eine Fehlermeldung, daß kein Compiler eingestellt sei. Da hab ich Projekt -> Projekteinstellungen -> Compiler Kommandos -> Compiler das Häkchen bei "Aufruf an" Kompilieren und Neu Kompilieren aktiviert.

Dann auf Start -> Aufräumen und kompilieren bleibt er in LazConf.pp stehen und mosert, daß er LazConf.inc nicht finden kann.
Gehe ich über Werkzeuge -> Kompiliere Lazarus mit Profil: Debug IDE, dann compiliert es ohne Probleme aber keine Ahnung ob dann die Debugsymbole an der richtigen Adresse stehen.

Gehe ich dann wieder in customform.inc und füge die Zeile s := WidgetsetClass.Classname ein, compiliert er verschiedene Packages neu, startet und crasht dann wieder bei dieser Zeile.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: GLScene mit Lazarus 2.3.0 und FPC 3.3.1

Beitrag von wp_xyz »

Mir hat immer vor dem Debuggen der IDE gegraut...

Versuche stattdessen auf das GLScene-Designzeit-Package vorerst zu verzichten und einige Komponenten zur Laufzeit zu erzeugen und damit zu arbeiten (damit müsste man natürlich wissen, wie GLScene funktioniert). In der Regel treten dabei dieselben Schutzverletzungen auf (es sei denn, sie stecken in speziellen Property-/Component-Editoren), und nun kommst du aber viel leichter ran, weil du nur eine Anwenndung debuggen musst.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: GLScene mit Lazarus 2.3.0 und FPC 3.3.1

Beitrag von Michl »

OK, habe mich gerade daran gesetzt und einfach den Code vom Patch übernommen. Zumindest startet die IDE dann. Ob weiter was benötigt wird, weiß ich nicht. Kenn mich mit dem Package auch überhaupt nicht aus.

Anbei die Patches. Einmal komplett mit den angepassten Verzeichnissen und einmal nur die geänderten Register Prozeduren. Evtl. kommst du ja damit weiter?!
Dateianhänge
RegisterProceduresOnly.patch
(2.41 KiB) 52-mal heruntergeladen
Complete.patch
(41.93 KiB) 55-mal heruntergeladen

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: GLScene mit Lazarus 2.3.0 und FPC 3.3.1

Beitrag von fliegermichl »

Also ich habe jetzt GLScene nochmal per svn installiert, Complete.patch eingespielt und mein Projekt, daß ziemlich exzessiv GLScene benutzt compiliert.

Läuft!
Vielen Dank.

Soll ich den gepatchten Quellcode in eine Datei GLScene.zip packen und an GetMem schicken, damit der OPM auch diese Version hat?

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: GLScene mit Lazarus 2.3.0 und FPC 3.3.1

Beitrag von wp_xyz »

Ja, und erkläre ihm, warum GLScene gepatch wurde. Vielleicht hängst du auch Michl's complete.patch noch an, so dass er sieht, was geändert ist.

Vor allem aber schreibe dem Maintainer von GLScene, dass das "offizielle" Package wertlos ist (wobei ich skeptisch bin, weil dein voriger Post im GLScene-Forum noch immer unbeantwortet ist). Vielleicht kümmert er sich drum... (aber wenn er's nicht weiß, KANN er sich nicht kümmern).

Antworten