Problem mit Heap-Trace

Für Fragen rund um die Ide und zum Debugger
Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Problem mit Heap-Trace

Beitrag von theo »

Hast du eigentlich mal versucht, statt heaptrc die ganzen Überprüfungen (Projekt->Projekteinstellungen->Debuggen->Überprüfungen) einzuschalten?
Kracht's damit vielleicht auch schon (neu bauen)?

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: Problem mit Heap-Trace

Beitrag von photor »

Jup. Alles drin - Haken bei:
  • I/O (-Ci)
  • Bereich (-Cr)
  • Überlauf (-Co)
  • Stack (-Ct)
  • Methodenaufrufe überprüfen (-CR)
  • Code für Assertation einfügen (-Sa)
Zusätzlich natürlich auch
  • Generate infor for Debugger
  • debugging-Info-Typ Automatisch (-g)
  • Zeilennummern in Laufzeitfehler-Backtraces anzeigen (-gl)
Das ist auch mehr oder weniger Standard-Einstellung für die Entwicklung. Damit läuft das Programm durch.

Erst wenn "Andere Debugger-Optionen" -> "Heaptrc-Unit verwenden" anhake, tut's nicht mehr.

Mein Verdacht: da ist irgendwo noch ein Speicherüberlauf - den dachte ich ja gerade so zu finden.

Ciao,
Photor

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

Re: Problem mit Heap-Trace

Beitrag von wp_xyz »

photor hat geschrieben:
So 20. Feb 2022, 11:40

Code: Alles auswählen

begin
  FATEntry := TFAtEntry.Create;
  FATEntry := FatigueList[IDLC];
  .......
Seltsam: Wieso überschreibst du die Variable mit der Instanz von TFAtEntry, die du in der ersten Zeile erzeugt hast, in der nächsten Zeile gleich wieder?

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

Re: Problem mit Heap-Trace

Beitrag von theo »

wp_xyz hat geschrieben:
Di 22. Feb 2022, 16:44
photor hat geschrieben:
So 20. Feb 2022, 11:40

Code: Alles auswählen

begin
  FATEntry := TFAtEntry.Create;
  FATEntry := FatigueList[IDLC];
  .......
Seltsam: Wieso überschreibst du die Variable mit der Instanz von TFAtEntry, die du in der ersten Zeile erzeugt hast, in der nächsten Zeile gleich wieder?
Guter Einwand, aber da müsste heaptrc doch ein Speicherleck anzeigen und keine Exception bei "Append" auslösen?
Das ist halt immer das Problem, wenn man nur ein kurzes Code-Snippet vorgesetzt bekommt. Ich schaue mir das meistens gar nicht richtig an.
Was ist "TFAtEntry" and why should I care?

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

Re: Problem mit Heap-Trace

Beitrag von wp_xyz »

theo hat geschrieben:
Di 22. Feb 2022, 16:55
da müsste heaptrc doch ein Speicherleck anzeigen und keine Exception bei "Append" auslösen?
Normalerweise ja. Aber ich bin denke, dass die heaptrc-Speicherverwaltung schon vorher durcheinandergebracht wurde. Und ich behaupte auch nicht, dass diese Stelle das Problem verursacht. Aber dieser "Flüchtigkeitsfehler" in diesem winzigen Code-Ausschnitt zeigt, dass noch mehr von dieser Sort vorhanden sind...

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: Problem mit Heap-Trace

Beitrag von photor »

theo hat geschrieben:
Mo 21. Feb 2022, 21:58
Ja, das ist der Trick bei WriteAnsiString, aber du kannst auch nur Write nehmen wie im Bsp. unten, dann kommt keine Länge mit.

https://wiki.freepascal.org/TFileStream
OK. Das habe ich jetzt implementiert. An der Formatierung müsste ich noch arbeiten - das sollte aber kein Problem sein.

Das spannendste ist aber: so läuft das Programm durch! Und der Heap-Trace zeigt aber noch:
  • total memory allocated: -1
  • leaking mem size: 0
  • leaking block size: 0
Die Datei ist leer.

PS: der "alte" Code ist noch Teil der Unit, wird nur nicht mehr angesprungen.

Ich werte das bis hierher mal als (Teil-)Erfolg.

Nachtrag: mittlerweile schreibt er auch was in das heap.trc-File, was sich mit "Leaks and Traces" auswerten lässt. Jetzt muss ich mich da durch graben (ist aber nicht so viel, wie ich befürchtet habe :wink: ).

Also: Danke für Eure Hilfe.

Ciao,
Photor

Antworten