Valgrind is an award-winning instrumentation 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 profiler, and a
heap profiler. It also includes two experimental tools: a heap/stack/global
array overrun detector, and a SimPoint basic block vector generator. It runs
on the following platforms: X86/Linux, AMD64/Linux, PPC32/Linux, PPC64/Linux,
and X86/Darwin (Mac OS X).
