niedziela, 22 maja 2011

Memory allocation checking

Here is list how to check for memory allocation problems (leaks, writing past buffer, etc.)

glibc based:
- mcheck(), mprobe() functions and MALLOC_CHECK_ env. variable (see 'man malloc' and http://www.gnu.org/s/libc/manual/html_node/Heap-Consistency-Checking.html)

- mtrace() function and 'mtrace' command http://www.gnu.org/s/libc/manual/html_node/Allocation-Debugging.html

- glibc-utils (mtrace, xtrace, memusage, ...)


gcc based:
- Mudflap Pointer Debugging http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging

- GCC extensions: Bounds checking patches, ProPolice Stack-Smashing Protector
One thing is not clear here - there is option -fbounds-check which seems to compile in gcc (does it work?) and 'bounds checking patches' which gives -fbounds-checking option.


One and only:
- valgrind


Other free solutions:
- Electric fence http://directory.fsf.org/project/ElectricFence/

- DUMA library http://sourceforge.net/projects/duma/

- Memwatch http://www.linkdata.se/sourcecode/memwatch/

- halloc - not really a checker but useful http://directory.fsf.org/project/halloc/


Proprietary:
- Insure++

- Purify (IBM-Rational)


There is basic question - maybe design approach should be different e.g.:
- allocate memory on startup (pool)
- use sentry to check if tasks release objects allocated on pool

Brak komentarzy:

Prześlij komentarz