Support for Debugging Memory Allocation
Heap Allocation Debugging
The MPICH2 code contains built-in support for tracing and verifying memory allocation. To make use of this support, configure with
--enable-g=mem (you may combine
mem with other debugging options, such as
The following environment variables, if they are set to the value
yes, will change the behavior of the memory allocation routines:
- Validate all of the allocated memory, checking for damaged headers or overwritten memory sentinels, every time memory is allocated or freed.
- Initialize allocated and freed memory to zero. Normally, the memory is initialized to
0xdato help detect references to uninitialized memory. Freed memory is filled with
0xfcto help detect reads/writes from/to deallocated memory.
MPI_Finalize, any memory allocated but not freed will be written out.
Handle Allocation Debugging
MPICH2 also contains separate facilities for allocating object handles (such as
MPI_Comm's) and the associated underlying object. Similarly, these facilities have debugging code to help with memory errors that is enabled via
--enable-g=mem. You should also add
meminit if you intend to debug with valgrind (see below)
Newly allocated handles will be filled with
0xef. Freed handles will be filled with
The old version of the memory debugging code interfered with valgrind's ability to detect uninitialized data. As of r3255 MPICH2 contains Valgrind Client Requests to prevent this problem when configured with
memcheck.h are not in your default path you will need to add that include path to your configure line.
./configure [your_args_here] --enable-g=meminit CPPFLAGS='-I/path/to/valgrind/includes'
./configure --prefix=/sandbox/goodell/mpich2-installed --enable-g=dbg,mem,meminit CPPFLAGS='-I/usr/include/valgrind'
If configure can't find these two headers then valgrind may not report certain types of errors when
--enable-g=mem is specified. Also, if you intend to use valgrind with MPICH2 you should generally configure with
--enable-g=dbg,meminit at the very least. This will get you stack traces and prevent several known false positives from being reported as well as the false negative prevention that has been mentioned.