Speicherzugriffsfehler (Speicherabzug geschrieben)

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Speicherzugriffsfehler (Speicherabzug geschrieben)

Beitrag von MacWomble »

Danke erst mal. Ich werde das am WE noch genauer prüfen. Aber ich habe bewusst keine lib ausgetauscht.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Speicherzugriffsfehler (Speicherabzug geschrieben)

Beitrag von MacWomble »

So, habe jetzt mit verschiedenen DBs (MySQL, MariaDB mit lokalem Server und Netzserver) auf verschiedenen Rechnern getestet - die Datenbank scheint es nicht zu sein.
Es kommt auch bei der Debug-Version hin und wieder zu einer Heaptrace-Meldung, aber bei weitem nicht so oft wie in der Release.
Es ist auch nicht nachvollziehbar, nach welchen Programmaktionen es auftritt. Ich kann ein paar mal die selben Aktionen ausführen und alles ist OK, dann wieder kommt es zu Differenzen in der Heap :cry:

Da muss ich wohl weiter graben, bis ich den Übeltäter gefunden habe. :x

Gibt es noch irgendwelche Tipps, wie man da am besten vorgeht?
Mein Programm besteht aus rund 50 Forms, was es nicht eben einfach macht ...
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
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: Speicherzugriffsfehler (Speicherabzug geschrieben)

Beitrag von af0815 »

Zur Klarstellung suchst du nach Speicherlöchern = Heaptrace oder warum du den Speicherzugriffsfehler (= Speicherzugriffsfehler (Speicherabzug geschrieben) hast.

Das sind für mich 2 verschiedene paar Schuhe.
A) Heaptrace ist/kann eine Folge des Speicherzugriffsfehler sein. Daher würde ich einmal dort auf die Suche gehen warum bzw. wo er kracht.
B) Heaptrace meldet sich nachdem das Programm Ordnunggemäß beendet wurde, dann kann man anhand der Meldungen versuchen das Problem mit dem Speicher einzugrenzen.

Für mich 2 komplett unterschiedliche Herangehensweisen.
Bei A verwende ich meist das Konstrukt

Code: Alles auswählen

 {$ifdef debug_log}Debugln({$I %FILE%} + '->' +{$I %CURRENTROUTINE%} + ' ' +{$I %LINE%});{$endif}

damit ich einmal eingrenzen kann in welcher Routine genau das Programm den Zugriffsfehler macht, wenn ich schon im Release arbeiten muss. Das bedingt natürlich den LazLogger.

Bei B sollten die Probleme unabhängig von Debug oder Release auftreten, dann arbeite ich meist mit Breakpoints beim Erstellen bzw. freigeben der Objekte und mache mit echte Strichliste (am Papier :-) ganz Klassisch)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten