File: memcheck_laz.inc

package info (click to toggle)
lazarus 2.0.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 214,460 kB
  • sloc: pascal: 1,862,622; xml: 265,709; cpp: 56,595; sh: 3,008; java: 609; makefile: 535; perl: 297; sql: 222; ansic: 137
file content (154 lines) | stat: -rw-r--r-- 3,822 bytes parent folder | download | duplicates (9)
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}