Out of curiosity, wouldn't print statement go along with reading and rereading code methods? I switched from using debugger to mainly using print statement (and log, but they're functionally similar) because the feedback loop for using debugger is significantly longer. If you have the code in your mind and a "sense" of what could go wrong, seeing the state of program when it failed is generally sufficient for me.