This is version 2.2 of mpr, a memory allocation profiler for C/C++ programs.
mpr finds malloc/realloc memory leaks and memory allocation statistics by
using a simple, brute force strategy: log all malloc/free calls to a file and
post-process this log file when the program terminates.
mpr keeps track of the entire call chain leading up to a malloc/free call. This
is superior to conventional methods that keep track of only the immediate
caller using __FILE__ and __LINE__ pre-processor tricks.
As of version 2.0, you no longer need to re-link your application in order to
use mpr. If your program is dynamically linked, using mpr can be as simple as
typing 'mpr program ...' (see mpr.html for details).
--
To give you an idea of what mpr can do, here are some sample outputs:
(1) memory allocations grouped by call chains:
(col2=number of allocs, col3=amount allocated, col4=percent)
main(tst.c,52) 55 1760 2.35%
foo(bar.c,14):bar(bar.c,28):main(tst.c,59) 200 2000 2.67%
main(tst.c,47) 200 3200 4.27%
foo(bar.c,19):bar(bar.c,28):main(tst.c,59) 200 4000 5.34%
foo(tst.c,34):main(tst.c,58) 200 12800 17.08%
foo(baz.c,21):baz(baz.c,29):main(tst.c,60) 200 51200 68.30%
(2) memory leaks grouped by call chains:
(col2=number of allocs leaked, col3=amount leaked, col4=percent)
main(tst.c,47) 52 832 2.36%
foo(bar.c,14):bar(bar.c,28):main(tst.c,59) 88 880 2.50%
main(tst.c,52) 31 992 2.82%
foo(bar.c,19):bar(bar.c,28):main(tst.c,59) 103 2060 5.85%
foo(tst.c,34):main(tst.c,58) 108 6912 19.62%
foo(baz.c,21):baz(baz.c,29):main(tst.c,60) 92 23552 66.86%
(3) memory allocations grouped by size:
(col1=size, col2=number of allocs, col3=amount allocated col4=percent)
32 55 1760 2.35%
10 200 2000 2.67%
16 200 3200 4.27%
20 200 4000 5.34%
64 200 12800 17.08%
256 200 51200 68.30%
(4) memory leaks grouped by size:
(col1=size, col2=number of allocs leaked, col3=amount leaked, col4=percent)
16 52 832 2.36%
10 88 880 2.50%
32 31 992 2.82%
20 103 2060 5.85%
64 108 6912 19.62%
256 92 23552 66.86%
--
The following tools are supplied with mpr-2.2:
mpr - run a program, after setting LD_PRELOAD/MPRFI so that
mpr can intercept and log calls to malloc/free
mprmap - map program counters in an mpr log to function names and
file/line coordinates
mprchain - group allocations/leaks by call chains
mprsize - group allocations/leaks by size
mprleak - show memory leaks
mprhisto - show memory allocation histogram
The currently supported targets are:
x86-linux
mpr requires GNU GDB in addition to some standard Unix utilities (awk,
sed, nm, sort, cut).
See file LICENSE for terms and conditions under which you may use mpr.
See file INSTALL for instructions on how to build and install mpr.
See directory doc/ for documentation.
mpr was designed to be simple and easy to use - please keep it that way.
Please send all bug reports and suggestions to
taj.khattra@pobox.com (Taj Khattra)