In my perosnal experience there have been very many times where I couldn't use a debugger because of oddities of my development workflow ( sometimes I have to do dev in a container because I'm not root on my development machine ) or the fact that I was working on a DevOps automation tool that could only be tested in a specific environment after being deployed to a remote machine.
In these cases, I had wanted a debugger sometimes, but print lines had to suffice and worked pretty well in many cases.
The interesting thing is that the times that I have had access to a debugger and thought it would help me out, it didn't help me half as much as I thought because all of the tricky things/algorithms in code for me have happened to be in hot loops. In these cases, it often doesn't help if I have to step through every loop when the loop is going to run 10000 times before I run into an issue. But using println I can actually get a dense aggregation of all of the variables I'm intersted in and scan that info quickly in a log to see how it changes over time. So having a printed history was more useful than an interactive walkthough.
Still, that isn't every case. There was one time I was debugging an FFI call and I was able to see that the memory that one of my variables was pointing to was blank and it helped me realize that I had accidentally gotten the order of the arguments of the C function wrong. Very useful.
So for me it depends a lot on what kind of software I'm working on.