LEAP: lightweight deterministic multi-processor replay of concurrent java programs