Free Pascal 3.2.2-rc1 verfügbar

Mitteilungen und Ankündigungen
Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: Free Pascal 3.2.2-rc1 verfügbar

Beitrag von Ich934 »

Ja, das mir schon klar. Aber überall eine 0? Nichts allokiert bei nen Programm mit über 10.000 Zeilen Code, zig Formularen und OOP? Unwahrscheinlich.

Ich sag ja nicht, das ich nicht sauber gearbeitet hab ;-) aber alles auf 0 sollte nicht sein.
Tipp für PostgreSQL: www.pg-forum.de

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Free Pascal 3.2.2-rc1 verfügbar

Beitrag von PascalDragon »

Kannst du es mal mit einem anderen Programm testen? Zum Beispiel mal explicit ein GetMem ohne zugehöriges FreeMem. Nur um zu schauen, wo das Problem eher liegt.
FPC Compiler Entwickler

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

Re: Free Pascal 3.2.2-rc1 verfügbar

Beitrag von wp_xyz »

Ich934 hat geschrieben:
So 28. Mär 2021, 15:20
Ja, das mir schon klar. Aber überall eine 0?
Sorry, da hätte ich weiter oben nachsehen sollen...

Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: Free Pascal 3.2.2-rc1 verfügbar

Beitrag von Ich934 »

Moin,

so, gerade das auf meinem Arbeitsrechner (Windows 10) getestet. Dort kann ich das nicht reproduzieren.
PascalDragon hat geschrieben:
So 28. Mär 2021, 16:03
Kannst du es mal mit einem anderen Programm testen? Zum Beispiel mal explicit ein GetMem ohne zugehöriges FreeMem. Nur um zu schauen, wo das Problem eher liegt.
FPC 3.2.0

Code: Alles auswählen

C:\fpcupdeluxe\projects\Testprogramm>project1.exe
Heap dump by heaptrc unit of C:\fpcupdeluxe\projects\Testprogramm\project1.exe
1 memory blocks allocated : 0/0
0 memory blocks freed     : 0/0
1 unfreed memory blocks : 0
True heap size : 98304 (160 used in System startup)
True free heap : 97920
Should be : 97952
Call trace for block $0000000001661B70 size 0
  $000000010000551B
  $0000000100001605  main,  line 7 of project1.lpr
  $0000000100001626
  $000000010000A120
  $00000001000015C0
  $00007FFE5F787034
  $00007FFE60962651
  $506E6F6D6D6F4300
  $69466D6172676F72
  $293638782873656C
  $676F72505C3A433D
  $656C6946206D6172
  $5C29363878282073
  $46206E6F6D6D6F43
  $6D6F430073656C69
  $72676F72506E6F6D
FPC 3.2.2-RC1

Code: Alles auswählen

C:\fpcupdeluxe\projects\Testprogramm>project1.exe
Heap dump by heaptrc unit of C:\fpcupdeluxe\projects\Testprogramm\project1.exe
1 memory blocks allocated : 0/0
0 memory blocks freed     : 0/0
1 unfreed memory blocks : 0
True heap size : 98304 (160 used in System startup)
True free heap : 97920
Should be : 97952
Call trace for block $0000000001637140 size 0
  $00000001000055EB
  $0000000100001635  main,  line 7 of project1.lpr
  $0000000100001656
  $000000010000A430
  $00000001000015F0
  $00007FFE5F787034
  $00007FFE6096265
Das schaut für mich richtig aus. Hier noch mein Testprogramm:

Code: Alles auswählen

program project1;

var
  Test: integer;

begin
  GetMem(Test);
end.
Ich werde es heute Abend noch einmal unter Linux testen... In meinem Testszenario hat sich nur FPC geändert. Alles andere ist gleich geblieben.

cu tb
Tipp für PostgreSQL: www.pg-forum.de

Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: Free Pascal 3.2.2-rc1 verfügbar

Beitrag von Ich934 »

So, mein Testprogramm unter Linux geht auch, mein eigentliches Programm erzeugt die 0er. Ich habe jetzt die Einstellungen verglichen und das Problem gefunden.

Ist in den Einstellungen unter "Debuggen" die Option "Code für valgrind erzeugen (-gv)" aktiv, dann erscheinen die 0er. Ist diese Option aus, dann funktioniert alles einwandfrei. Warum diese Option aktiv ist weiß ich nicht, sicherlich nicht bewusst. Auf jeden Fall sollte es nicht zu diesem Ergebnis führen.

Schöne Grüße
Tipp für PostgreSQL: www.pg-forum.de

Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: Free Pascal 3.2.2-rc1 verfügbar

Beitrag von photor »

Ich934 hat geschrieben:
Mo 29. Mär 2021, 17:23
Ich habe jetzt die Einstellungen verglichen und das Problem gefunden.

Ist in den Einstellungen unter "Debuggen" die Option "Code für valgrind erzeugen (-gv)" aktiv, dann erscheinen die 0er. Ist diese Option aus, dann funktioniert alles einwandfrei. Warum diese Option aktiv ist weiß ich nicht, sicherlich nicht bewusst. Auf jeden Fall sollte es nicht zu diesem Ergebnis führen.
DAS wird es auch bei mir sein! Hatte kurz mit valgrind experimentiert.

Also nehme ich die Option (erstmal) wieder raus.

Merci für‘s Suchen,
Photor

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Free Pascal 3.2.2-rc1 verfügbar

Beitrag von PascalDragon »

Ich934 hat geschrieben:
Mo 29. Mär 2021, 17:23
Ist in den Einstellungen unter "Debuggen" die Option "Code für valgrind erzeugen (-gv)" aktiv, dann erscheinen die 0er. Ist diese Option aus, dann funktioniert alles einwandfrei. Warum diese Option aktiv ist weiß ich nicht, sicherlich nicht bewusst. Auf jeden Fall sollte es nicht zu diesem Ergebnis führen.
Das Problem ist, dass -gv dafür sorgt, dass der C Memory Manager (Unit cmem) verwendet wird. Und heaptrc kann eben nicht mit cmem zusammen verwendet werden. Trunk beschwert sich hier übrigens auch:

Code: Alles auswählen

PS D:\fpc\git> .\compiler\ppc386.exe -gh -gv
Error: You can not use both options (-gh) (-gv) at same time.
Mal schauen, ob ich die Revision auf 3.2.1 noch zurückportieren kann...
FPC Compiler Entwickler

Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: Free Pascal 3.2.2-rc1 verfügbar

Beitrag von Ich934 »

OK, das macht Sinn. Dann sollten sich diese Optionen in Lazarus aber auch gegenseitig ausschließen - ok das jetzt dann nicht mehr dein Part.

Aber auch die Meldung vom heaptrc sollte dann so nicht erscheinen. Eine Fehlermeldung als Ausgabe wäre hier imo sinniger...

cu tb
Tipp für PostgreSQL: www.pg-forum.de

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Free Pascal 3.2.2-rc1 verfügbar

Beitrag von marcov »

Vielleicht irgendwo eine andere heapmgr unit installiert? zb cmem ?

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Free Pascal 3.2.2-rc1 verfügbar

Beitrag von PascalDragon »

Ich934 hat geschrieben:
Di 30. Mär 2021, 09:54
OK, das macht Sinn. Dann sollten sich diese Optionen in Lazarus aber auch gegenseitig ausschließen - ok das jetzt dann nicht mehr dein Part.
Wie gesagt, trunk beschwert sich hier mittlerweile. Und ich werd' schauen, dass ich das auch in 3.2.1 zurückziehe, damit der 3.2.2-final sich ebenfalls beschwert.
Ich934 hat geschrieben:
Di 30. Mär 2021, 09:54
Aber auch die Meldung vom heaptrc sollte dann so nicht erscheinen. Eine Fehlermeldung als Ausgabe wäre hier imo sinniger...
heaptrc hat keine Ahnung was für ein Memory Manager verwendet wird. Deswegen haben wir uns ja auch dazu entschlossen die Kombination Valgrind & HeapTrc beim Kompilieren zu blockieren.
FPC Compiler Entwickler

Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: Free Pascal 3.2.2-rc1 verfügbar

Beitrag von Ich934 »

Moin,

die Komponente TParadoxDataset erzeugt einen Pointer Fehler mit 3.2.2-RC1 bei folgendem Code:

Code: Alles auswählen

pdxGrid.DataSource.DataSet.First;
Es wurde vorher eine Tabelle geöffnet und der RecordCount des DataSet ist > 0. Mit 3.2.0 funktioniert das ohne Probleme.
Tipp für PostgreSQL: www.pg-forum.de

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

Re: Free Pascal 3.2.2-rc1 verfügbar

Beitrag von wp_xyz »

"Erzeugt einen Fehler" ist wenig hilfreich. Welchen Fehler?

TParadoxDataset gibt es zweimal. Eine Version kommt mit Lazarus und steht im Ordner components/paradox. Die andere Version steht im Lazarus-Components-and-Code-Repository im Order components/tpardoxdataset und hat zwei Packages mit identischem Inhalt: das für die Installation empfohlene heißt lazparadoxpkg.lpk, das andere lazparadox.lpk, hat aber einen Namenskonflikt mit dem Package aus der Lazarus-Installation.

Also genug Möglichkeiten, etwas falsch zu machen. Welches Package macht das Problem? Woher hast du es?

Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: Free Pascal 3.2.2-rc1 verfügbar

Beitrag von Ich934 »

Ich habe das Paket aus dem OPM.
Projekt DBKonverter hat Exception-Klasse >>EInvalidPointer<< ausgelöstm mit der Meldung: Invalid pointer operation

Bei Adresse ...
Tipp für PostgreSQL: www.pg-forum.de

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Free Pascal 3.2.2-rc1 verfügbar

Beitrag von PascalDragon »

Ich934 hat geschrieben:
So 4. Apr 2021, 10:40
die Komponente TParadoxDataset erzeugt einen Pointer Fehler mit 3.2.2-RC1 bei folgendem Code:

Code: Alles auswählen

pdxGrid.DataSource.DataSet.First;
Es wurde vorher eine Tabelle geöffnet und der RecordCount des DataSet ist > 0. Mit 3.2.0 funktioniert das ohne Probleme.
Würdest du das bitte auf ein möglichst kleines Beispiel reduzieren, mit dem man das auch nachvollziehen kann?
FPC Compiler Entwickler

Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: Free Pascal 3.2.2-rc1 verfügbar

Beitrag von Ich934 »

Würdest du das bitte auf ein möglichst kleines Beispiel reduzieren, mit dem man das auch nachvollziehen kann?
Hier ein Minimalprogramm. 3.2.0 funktioniert, 3.2.2 bringt den Pointer-Fehler. Paradox-Komponente aus OPM installiert.

Code: Alles auswählen

program ParadoxTest;

{$mode objfpc}{$H+}

uses
 {$IFDEF UNIX} {$IFDEF UseCThreads}  cthreads, {$ENDIF} {$ENDIF}
  Interfaces,
  Forms,
  Unit1,
  Classes,
  SysUtils,
  Controls,
  Graphics,
  Dialogs,
  DB,
  DBGrids,
  LazFileUtils,
  paradoxds;

{$R *.res}

var
  pdxDataset: TParadoxDataset;
  pdxDataSource: TDataSource;
  pdxDBGrid: TDBGrid;

begin
  pdxDataset := TParadoxDataset.Create(nil);
  // Pfad anpassen !!!
  pdxDataset.TableName := '<Pfad zur Paradox-Datei>';
  pdxDataset.Open;
  // Dataset
  pdxDataSource := TDataSource.Create(nil);
  pdxDataSource.DataSet := pdxDataset;
  // Tabelle auslesen
  pdxDBGrid := TDBGrid.Create(nil);
  pdxDBGrid.DataSource := pdxDataSource;
  // Datensätze in Tabelle vorhanden
  if pdxDBGrid.DataSource.DataSet.RecordCount > 0 then
  begin
    // auf ersten DS springen
    pdxDBGrid.DataSource.DataSet.First;
  end;
  // Tabelle schließen
  pdxDBGrid.Free;
  pdxDataSource.Free;
  pdxDataset.Close;
end.  
Tipp für PostgreSQL: www.pg-forum.de

Antworten