Valgrind and Dynamic Analysis for Memory Errors
Valgrind used dynamic binary translation and shadow state to turn ordinary program execution into a heavyweight analysis environment, making memory errors observable without recompiling the target program.