In the area of debugging parallel executions, record and replay is a technique that allows deterministic debugging even in the presence of data races. It is useful as most programmers are used to re-executing programs to find bugs.However, very little is known about how the consistency model affects record and replay. Previous work only applied to very strong consistency models, or to a specific architecture of shared memory. Very little theoretical basis has been developed for record and replay. This thesis makes three contributions:• An algorithm that records the minimum record for record and replay under causal consistency.• A demonstration that guaranteeing progress for a given replay mechanism can depend on the consistency model.• A demonstration that heterogeneous consistency record and replay is possible, that is, it is possible to record an execution on one consistency model and replay it on another.