So Wolfram isn't a standard imperative language where there is a notion of a state and steps. It's a term-rewriting system. In these systems, debuggers aren't necessarily what you need to figure out, "What is the state at this step."
One way most people do this is to use Sow/Reap combinations. An expression is evaluated at certain points, and you can collect values of the expression and show what those values are at that point.
Another is to use Trace, which shows the raw steps used in the evaluation.
Again, I think you're looking for a debugger, but it's not exactly what you need. With trace and sow/reap, you can easily find what you're looking for.