Distributed debugging based on deterministic reexecution : methodology and design of a working prototype