I often face cases where I could troubleshoot programs by comparing the execution traces of two versions of it, from the same inputs, until the behaviors diverge.
This could probably be done by logging all steps taken (minimally, could be just the visited line numbers; maximally, output of all modified values). And on a second run, break as soon as a change is found.
Comparison with the granularity of high-level languages constructs (lines) could do; assembly-level as well (provided cross referencing the source code is done).
Is there any symbolic debugger or equivalent product able to do that ?