Valgrind[valgrind] is an excellent debugging
system that simulates an x86 in order to catch memory allocation
and access errors. The source code indicates some preliminary
support for PC value and memory access profiling, that must
be explicitly enabled at compile time.