Every other program we use daily has lots of these. One way of making a metaphor easy and natural to users is to use well known paradigms and everyday familiar objects. Only then program. You have to think about the problem first. Inspecting variables, disassembling, and getting involved in other low-level details is exactly the wrong approach.
Computers are great devices to walk-through zillions of operations per second.
Debuggers, OTOH, are great devices to make people do the tedious walking instead. For starters, debuggers are designed backwards. Moreover, it is enough to save deltas only. Coarse grained stepping Debugger step control should be event driven. Start with the corrupted variable, assertion failure, or symptom.