Execution Indexing and Its Application in Debugging

Execution indexing (EI) [PLDI'08] is a dynamic analysis primitive that facilitates comparison across executions. These executions could be those induced by different inputs on the same program, those with the same inputs but different schedules, or even those induced by the same input on different program versions, depending on the scenarios. It canonicalizes the control flow of the executions and allows them to be properly aligned before comparison, to the precision level of individual executed instructions. This is particularly necessary in the presence of loops, recursions and control flow divergence. Note that the nth instance of an instruction in one run unlikely corresponds to that in the other run.