Ich schreibe mir gerade mein eigenes DBMS und gebe mir hierbei die totale Pointerschlacht. Ich bin zwar der guten Hoffnung auch wieder alle frei gegeben zu haben, doch sicher bin ich mir eben nicht.
Für Windows und Delphi gab es da die Memcheck.pas, doch wenn man in der liest, steht da extra das sie nur für Delphi sei. Also hab ich mal angefangen nach einer Lazarus Version zu suchen. Google sagte mir dann das Lazarus so was hat. und Tatsächlich
lazarus/components/codetools/memcheck.pas
gibt es.
Nun von der Delphi her weis ich, dass man Memcheck als 1. Unit einbinden musste und dann die Prozedur Memchk aufrufen musste. In der Lazarus Memcheck.pas gibt es die Prozedur nicht, ich hab sie aber einfach mal so eingebunden und wollte sehen was passiert. Aber außer einer AV beim Starten wo der Debugger dann in memcheck_laz.inc :
Code: Alles auswählen
procedure RunError(RunErrorNumber: word);
begin
if ExceptOnError then begin
// create an gdb catchable exception
if 0=(1 div ((ord(ExceptOnError) and 1) shr 1)) then ; <-- HIER
end;
if HaltOnError then System.Halt(1);
System.RunError(RunErrorNumber);
end;
Nun hab ich zwar ein bischen mit den Compiler Einstellungen rum gespielt doch funktionniert hats bisher noch nicht.
Daher nun die Frage an euch, könnt ihr mir sagen wie ich Memcheck.pas nutzen kann ?
Die Windows Version war sehr Komfortabel, da hat man am Schluss einen Dialog bekommen, ob es Leaks gab, und wenn es welche tatsächlich welche gab, sprang der Debugger sogar an die Zeile in der der Speicher Allokiert wurde, und gab dann den Bericht aus...
Das hier ist mein bisheriges Testprogramm :
Code: Alles auswählen
Var
Form1: TForm1;
P: Pinteger = Nil;
Implementation
{ TForm1 }
Procedure TForm1.Button1Click(Sender: TObject);
Begin
new(p);
End;
Procedure TForm1.Button2Click(Sender: TObject);
Begin
If assigned(p) Then
dispose(p);
p := Nil;
End;
Könnt ihr mir weiter helfen ?