Causal-Consistent Reversible Debugging