71 lines
2.8 KiB
Plaintext
71 lines
2.8 KiB
Plaintext
.\" $Xorg: README,v 1.3 2000/08/17 19:55:19 cpqbld Exp $
|
|
|
|
This library replaces the C library allocator;
|
|
providing malloc, free, realloc and calloc (sorry, no valloc)
|
|
|
|
In doing so, it provides extensive memory bug checking, locating:
|
|
|
|
Lost memory; memory which has not been freed and which has no
|
|
references
|
|
|
|
In use free memory; memorhy which has been freed and still has
|
|
references to it.
|
|
|
|
Stores to freed memory
|
|
|
|
free/realloc with invalid pointers -- if you pass in a pointer to
|
|
the middle of an allocated block, it will even tell you which one
|
|
|
|
For each of these errors, a report entry is generated which includes
|
|
the stack backtrace of either the allocation or free (which ever occured
|
|
last) along with the current stack, when relevant.
|
|
|
|
Unreferenced allocated memory, stores to freed memory and referenced freed
|
|
memory are only caught when CheckMemory is called. It is automatically
|
|
called each time 1m of data has been freed, and is called when the program
|
|
exits (by registering with atexit(3)/on_exit(3)). You can call it whenever
|
|
you want.
|
|
|
|
Both the X server and font servers call CheckMemory after each reset when
|
|
their respective os/utils.c are compiled -DMEMBUG.
|
|
|
|
There are a few global variables you can set with the debugger to
|
|
help isolate problems:
|
|
|
|
FindLeakWarnMiddlePointers
|
|
Normally, memleak ignores pointers to the middle of
|
|
freed memory. These are frequently simply random data
|
|
which happens to look like a pointer. Turning this
|
|
on will generate additional messages.
|
|
FindLeakAllocBreakpoint
|
|
At each allocation, memleak increments a serial number
|
|
and stores it in the allocation header. By rerunning
|
|
the program, you can stop when that piece of memory
|
|
is going to be allocated. Store the serial number
|
|
in this global variable and put a debugger breakpoint inside
|
|
AddActiveBlock at the indicated line.
|
|
FindLeakFreeBreakpoint
|
|
Similarly for freeing memory.
|
|
FindLeakTime
|
|
The current serial number
|
|
FindLeakCheckAlways
|
|
When set, memleak checks the entire memory system after
|
|
each allocation or free. This is very expensive, but
|
|
may catch errors not otherwise found until too late.
|
|
|
|
To include this in your application, simply place libmemleak.a before the
|
|
end of the link line; it will then override the C library allocator.
|
|
|
|
To port this system to a new machine, you must provide two values, one
|
|
indicating the lowest data address in a program and one indicating the
|
|
highest stack address. In addition, to get return stack traces (which are
|
|
almost essential for debugging), you must provide the function
|
|
getReturnStack. Samples for MIPS and SPARC are included already.
|
|
|
|
The output from the leak tracer includes only PC values in the stack
|
|
traces. To convert these into useful values, run the output of
|
|
the leak tracer through the find-routines script; after making sure you have
|
|
built the modified version of gdb-4.4 on your machine.
|
|
|
|
-keith
|