Well, a debugger on a breakpoint should allow you to inspect any local scope variables along the globals, go through the call stack.. And you can watch vars, execute immediate commands and more in others. If that's not "print" on breakpoint...
Being able to stop the program at a single point does not help, not unless I can actively move backwards in time (not in the stack!) like in the Elm debugger (actually useful).