Memory Leaks finden

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
hy
Beiträge: 9
Registriert: Sa 4. Nov 2006, 16:04

Re: Memory Leaks finden

Beitrag von hy »

Jetzt wird es interessant:
Ich habe http://wiki.lazarus.freepascal.org/leakview diesen Abschnitt im Wiki gefunden.
Die Essenz ist:

Code: Alles auswählen

 
if FileExists('heap.trc') then
    DeleteFile('heap.trc');
  SetHeapTraceOutput('heap.trc');
 
Ich bin hier unter Linux/Debian/64 und wenn ich das Programm
1.) aus der IDE starte erhalte ich folgenden Output.

Code: Alles auswählen

 
/media/work/src/ylib/ylibtest/bin/ylibtest 
Heap dump by heaptrc unit
42743 memory blocks allocated : 4065255/4147408
42743 memory blocks freed     : 4065255/4147408
0 unfreed memory blocks : 0
True heap size : 688128
True free heap : 688128
 
 
2.) Starte ich das Programm auf der Kommandozeile
erhalte ich den gleichen Output

3.) Starte ich das Programm aus dem Filemanager "Krusader" heraus (da kann ich den output capturen) erhalte ich:
/bin/sh: 1: ./: Permission denied
Wobei es keinen Unterschied zu machen scheint, ob ich nach einer Datei logge oder nicht... )-;

Anmerkung: Die Fehlermeldung aus dem vorangegangenen Post ist nun auf magische Art und Weise verschwunden.
OS: Debian/sid(64) fpc2.6.4 Lazarus: SVN

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Memory Leaks finden

Beitrag von Euklid »

hy hat geschrieben:Hallo, ich habe den Fehler gefunden. Ich hatte einen Pointer der bereits alloziert war := NIL gesetzt und dann noch einmal initialisiert.
Problem scheint damit wohl aber noch nicht ganz behoben, da noch ein anderer Fehler auftritt. Aber der ist auch bereits eingegrenzt.
(Naja 100.000 Zeilen Quellcode sind dann eben nicht so schnell gecheckt).
Erst mal Danke fuers helfen.
Das Debuggen kann durch den genannten Tipp, die Debuggerinformationen mit einzubinden, erheblich erleichtert werden - der Output der heaptrc enthält dann die Quelltextzeile, in der die Speicherzugriffsverletzung aufgetreten ist.

Viele Grüße, Euklid

Antworten