Problem mit der 64 Bit Version

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1799
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Problem mit der 64 Bit Version

Beitrag von fliegermichl »

Ich habe FPC/Lazarus mit fpcupdeluxe Stable/Fixes frisch installiert. Version ist Lazarus 4.7 (rev lazarus_4_6-58-g310cad12d8) FPC 3.2.2 x86_64-win64-win32/win64

Wenn ich 32 Bit compiliere, funktioniert alles einwandfrei.
Bei der 64 Bit Version bekomme ich Access Violations an verschiedenen Stellen mit z.B. so einem Aufrufstack:
aufrufstack.png
aufrufstack.png (66.81 KiB) 2163 mal betrachtet
Da habe ich nicht die geringste Idee, was ich da tun könnte. Ist da was bekannt in der Richtung?

Benutzeravatar
theo
Beiträge: 11369
Registriert: Mo 11. Sep 2006, 19:01

Re: Problem mit der 64 Bit Version

Beitrag von theo »

Wenn du was compilierst?
Die IDE? Ein Programm von dir? Ein "leeres" Formular? ...

Zur Windows Version kann ich nicht viel sagen, aber auf Linux sind 64bit Standard und da funzt das.

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

Re: Problem mit der 64 Bit Version

Beitrag von fliegermichl »

theo hat geschrieben: Mi 20. Mai 2026, 08:34 Wenn du was compilierst?
Die IDE? Ein Programm von dir? Ein "leeres" Formular? ...
Ja sorry, das hätte ich erwähnen sollen. Es handelt sich um ein Programm von mir.
Wenn ich versuche, dieses Problem in ein nachvollziehbares Projekt zu extrahieren, dann geht das nicht.
Heisst, das Problem tritt dann nicht auf.
Aber wo fängt man in einem solchen Fall bei der Fehlersuche an?

Nachvollziehbar lande ich z.B. immer an einer Stelle in Virtualtrees.pas in der Zeile

Code: Alles auswählen

  Result := AllocMem(Size + FTotalInternalDataSize);
in der Methode TBaseVirtualTree.MakeNewNode.

Aber sowohl Size als auch FTotalInternalDataSize enthalten sinnvolle Werte und wie soll es bei AllocMem eine Zugriffsverletzung geben?
Ich versuche mal den FPC mit Debuginformationen zu erstellen. Vielleicht hilft mir das weiter.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7389
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Problem mit der 64 Bit Version

Beitrag von af0815 »

Grundlegend einmal alles Clean Kompilieren, auch das Projekt. Nicht das da auf "veraltete" ppu's zugegriffen wird. Besonders beim Umstellen von 32 Bit auf 64 unter Windows. Ist dein Lazarus 32 oder 64 Bit ? Sprich mit fpcupdeluxe in 32 Bit oder 64 Bit installiert.

Unter Windows habe ich mir 2 Installationen immer gemacht. Eine nativ 32 Bit und eine nativ 64 Bit. Und wenn ich ein Projekt von 32 auf 64 Bit umgestellt habe, dann auch alle ppu's entfernt, dann erst rekompiliert. Weil am Anfang beim Umstellen hatte ich auch immer wieder komische Erscheinungen. Ist aber auch schon wieder einige Lazarus releases zurück.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 11369
Registriert: Mo 11. Sep 2006, 19:01

Re: Problem mit der 64 Bit Version

Beitrag von theo »

fliegermichl hat geschrieben: Mi 20. Mai 2026, 08:52 Aber wo fängt man in einem solchen Fall bei der Fehlersuche an?
Nachdem was AF gesagt hat, beim Pointergemurkse. :wink:
Aber da müssten im Nachrichtenfenster eigentlich beim compilieren schon Meldungen kommen.

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

Re: Problem mit der 64 Bit Version

Beitrag von wp_xyz »

fliegermichl hat geschrieben: Mi 20. Mai 2026, 08:19 Da habe ich nicht die geringste Idee, was ich da tun könnte.
Immer wenn etwas Seltsames und Unerwartetes passiert, sauber neu kompilieren: Beim Projekt: "Start" > "Aufräumen und kompilieren", manchmal reicht "Start" > "Neu kompilieren". Manchmal auch komplett die IDE neu kompilieren: "Werkzeuge" > "Lazarus kompilieren einrichten" > "Alle aufräumen" und "Nach Neukompilieren zum automatischen Modus wechseln" markieren > "Neu kompilieren".

Zum Wechsel zwischen 32 und 64 bit: Mir ist das Cross-Compilieren zu kompliziert... Ich habe mir, ähnlich wie af0815, separate Installationen für 32 und 64 bit eingerichtet, zur Unterscheidung habe ich dem Editor-Gutter unterschiedliche Farben gegeben. Wenn ich ein Projekt unter 64 bit entwickelt habe, und es in 32 bit brauche, beende ich die 64-bit IDE, starte die 32-Bit IDE und lade das Projekt dort. Extern installierte Packages habe ich in einem gemeinsamen Ordner, auf den alle meine Lazarus-Installationen (egal, welche Version) zugreifen können. Es funktioniert erstaunlich gut, dass alles automatisch neu kompiliert wird. Und wenn's mal nicht klappt --> siehe oben.

Joh
Lazarusforum e. V.
Beiträge: 384
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: Problem mit der 64 Bit Version

Beitrag von Joh »

Beim letzten norddeutschen Treffen wurde ich dafür kritisiert, das ich neben meiner Standard-64-bit-Version eine weitere 32-bit-Version installiert habe.
Das geht doch einfach mit Cross-Compiling
Außer, das ich mich nicht mit den Tücken des Cross-Compilings rumschlagen möchte, ist es für meinen Kopf viel einfacher, wenn ich das strikt trenne.
just my two Beer

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

Re: Problem mit der 64 Bit Version

Beitrag von fliegermichl »

Ich habe auch zwei getrennte Lazarus/FPC Installationen.
Blöd ist halt, dass die Probleme nicht immer auftauchen.
Aufräumen und neu compilieren. Dann geht es meistens erst mal.
Kurze Zeit später wieder diese ominösen Zugriffsverletzungen.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7389
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Problem mit der 64 Bit Version

Beitrag von af0815 »

fliegermichl hat geschrieben: Fr 22. Mai 2026, 10:18 Ich habe auch zwei getrennte Lazarus/FPC Installationen.
Blöd ist halt, dass die Probleme nicht immer auftauchen.
Aufräumen und neu compilieren. Dann geht es meistens erst mal.
Kurze Zeit später wieder diese ominösen Zugriffsverletzungen.
Am kompilierten Code oder nach einem neuerlichen kompilieren ?

Edit: Ist die Anwendung Singlethreaded ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

martin_frb
Beiträge: 613
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Problem mit der 64 Bit Version

Beitrag von martin_frb »

Zwar etwas spät mit der Antwort, aber der Stack (falls er stimmt) is in LFM loading.

Das heist möglicherweise ist die resource Datei mit dem übersetzten LFM kaput.
Einfach mal die *.res Datei löschen.

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

Re: Problem mit der 64 Bit Version

Beitrag von fliegermichl »

Ich habe mir jetzt nochmal zusätzlich FPC/Lazarus stable installiert.
Lazarus 3.6 (rev lazarus_3_6) FPC 3.2.2 x86_64-win64-win32/win64

Da treten die genannten Probleme nicht auf. Stellt sich jetzt die Frage, wie bekomme ich das in ein nachvollziehbares Beispiel extrahiert?

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

Re: Problem mit der 64 Bit Version

Beitrag von wp_xyz »

Ich kenne eigentlich nur ein Szenario, bei dem der Wechsel von einer erfolgreich nutzbaren 32-bit-Anwendung auf 64-bit fehlschlägt: Pointer, genauer: Typumwandlungen von Pointer zu Integer und umgekehrt. Ein Pointer ist bei 64-bit 64 bit lang, ein Integer nur 32-Bit. Beim Cast Integer(Pointer) gehen unter 64bit die obersten 32 Bit verloren, und wenn man später zurück-castet, hat man Blödsinn im Pointer. Sowas macht man gelegentlich z.B. bei den Data-Objekten einer StringList, einer TreeView etc..., um zusätzliche Informationen an die Items zu koppeln.

Daher durchsuche den gesamten Quelltext per "Suchen" > "In Dateien suchen" nach dem Wort "Pointer". Wenn da ein Typcast zwischen Integer und Pointer steht, ist die Stelle sehr "heiß". Stelle sicher, dass der Integer als PtrInt oder PtrUInt deklariert ist - das ist der Integer-Typ der genauso lang ist wie ein Pointer.

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

Re: Problem mit der 64 Bit Version

Beitrag von fliegermichl »

wp_xyz hat geschrieben: Do 16. Jul 2026, 11:29 Ich kenne eigentlich nur ein Szenario, bei dem der Wechsel von einer erfolgreich nutzbaren 32-bit-Anwendung auf 64-bit fehlschlägt: Pointer, genauer: Typumwandlungen von Pointer zu Integer und umgekehrt.
Ja, davon mache ich regen Gebrauch. Aber der FPC Compiler gibt hierbei auch Warnungen aus. Ich werde das nochmal gernauer untersuchen.

Antworten