1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
{%MainUnit memcheck.pas}
{$IFDEF MC_Interface}
{$R-}
{$S-}
var
ExceptOnError: boolean = true;
procedure CheckHeap;
procedure CheckHeap(const txt: ansistring);
procedure CheckHeapWrtMemCnt(const txt: ansistring);
procedure WriteGetMemCount(const txt: ansistring);
function MemCheck_getmem_cnt: ptruint;
function MemCheck_freemem_cnt: ptruint;
function MemCheck_getmem_size: ptruint;
function MemCheck_freemem_size: ptruint;
function MemCheck_getmem8_size: ptruint;
function MemCheck_freemem8_size: ptruint;
{$ENDIF}
{$IFDEF MC_ImplementationStart}
// override RunError and Halt for better debugging
procedure RunError(RunErrorNumber: word); forward;
procedure Halt(ErrNum: byte); forward;
{$ENDIF MC_ImplementationStart}
{$IFDEF MC_ImplementationEnd}
// override RunError, so we can handle them according to the flags
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 ;
end;
if HaltOnError then System.Halt(1);
System.RunError(RunErrorNumber);
end;
// override RunError, so we can handle them according to the flags
procedure Halt(ErrNum: byte);
begin
if ExceptOnError then begin
// create an gdb catchable exception
if 0=(1 div ((ord(ExceptOnError) and 1) shr 1)) then ;
end;
System.Halt(1);
end;
// StartAddition for CodeTools
procedure CheckHeap;
var
p: pointer;
OldQuickTrace: boolean;
begin
writeln('>>> memcheck.pp - CheckHeap');
OldQuickTrace:=QuickTrace;
QuickTrace:=false;
GetMem(p,4);
FreeMem(p);
QuickTrace:=OldQuickTrace;
end;
procedure CheckHeap(const txt: ansistring);
var
p: pointer;
OldQuickTrace: boolean;
begin
writeln('>>> memcheck.pp - CheckHeap "',txt,'"');
OldQuickTrace:=QuickTrace;
QuickTrace:=false;
GetMem(p,4);
FreeMem(p);
QuickTrace:=OldQuickTrace;
end;
const
LastWrittenGetMemCnt: longint = 0;
HiddenGetMemCnt: longint = 0;
procedure CheckHeapWrtMemCnt(const txt: ansistring);
var
p: pointer;
StartGetMemCnt, CurGetMemCount, DiffGetMemCount: longint;
OldQuickTrace: boolean;
begin
StartGetMemCnt:=MemCheck_getmem_cnt;
CurGetMemCount:=StartGetMemCnt-HiddenGetMemCnt;
DiffGetMemCount:=CurGetMemCount-LastWrittenGetMemCnt;
LastWrittenGetMemCnt:=CurGetMemCount;
writeln('>>> memcheck.pp - CheckHeap2 "',txt,'" ',
CurGetMemCount,'(',StartGetMemCnt,') +',DiffGetMemCount);
OldQuickTrace:=QuickTrace;
QuickTrace:=false;
GetMem(p,4);
FreeMem(p);
QuickTrace:=OldQuickTrace;
// don't count mem counts of this proc
inc(HiddenGetMemCnt,MemCheck_getmem_cnt-StartGetMemCnt);
end;
procedure WriteGetMemCount(const txt: ansistring);
var
StartGetMemCnt, CurGetMemCount, DiffGetMemCount: longint;
begin
StartGetMemCnt:=MemCheck_getmem_cnt;
CurGetMemCount:=StartGetMemCnt-HiddenGetMemCnt;
DiffGetMemCount:=CurGetMemCount-LastWrittenGetMemCnt;
LastWrittenGetMemCnt:=CurGetMemCount;
writeln('>>> memcheck.pp - WriteGetMemCount "',txt,'" ',
CurGetMemCount,'(',StartGetMemCnt,') +',DiffGetMemCount);
// don't count mem counts of this proc
inc(HiddenGetMemCnt,MemCheck_getmem_cnt-StartGetMemCnt);
end;
function MemCheck_getmem_cnt: ptruint;
begin
MemCheck_getmem_cnt:=heap_info.getmem_cnt;
end;
function MemCheck_freemem_cnt: ptruint;
begin
MemCheck_freemem_cnt:=heap_info.freemem_cnt;
end;
function MemCheck_getmem_size: ptruint;
begin
MemCheck_getmem_size:=heap_info.getmem_size;
end;
function MemCheck_freemem_size: ptruint;
begin
MemCheck_freemem_size:=heap_info.freemem_size;
end;
function MemCheck_getmem8_size: ptruint;
begin
MemCheck_getmem8_size:=heap_info.getmem8_size;
end;
function MemCheck_freemem8_size: ptruint;
begin
MemCheck_freemem8_size:=heap_info.freemem8_size;
end;
// Addition for CodeTools
{$ENDIF MC_ImplementationEnd}
|