Valgrind is a framework for building dynamic analysis tools. There are
Valgrind tools that can automatically detect many memory management
and threading bugs, and profile your programs in detail. You can also
use Valgrind to build new tools.

The Valgrind distribution currently includes six production-quality
tools: a memory error detector, two thread error detectors, a cache
and branch-prediction profiler, a call-graph generating cache and
branch-prediction profiler, and a heap profiler. It also includes
three experimental tools: a heap/stack/global array overrun detector,
a different kind of heap profiler, and a SimPoint basic block vector
generator. It runs on the following platforms: x86/Linux, AMD64/Linux,
PPC32/Linux, PPC64/Linux, ARM/Linux, x86/MacOSX and AMD64/MacOSX.

Optional dependency: either mpich or openmpi. If one of these is
found, valgrind will include the MPI wrapper, which allows using
valgrind with software that uses the MPI message passing standard.
Note that only one of mpich or openmpi should be installed, as they
conflict with each other.
