I seldom use debuggers in the stereotypical way anymore. About the only time I use them is when I'm stepping through the code with some other person.
Dynamic instrumentation is key to things that don't scale naively, and surprisingly reusable (if left intact).
Debug logging is a baseline. If it's too verbose for monitoring a certain task, I've become a fan of counters being incremented in e.g. loops or other code points and printing them out at the end: the counts (especially zeros or bigger than anything else), their ratios and which paths were even run often turn out to be fruitful for statistical analysis when oddities are seen and this is especially true with any kind of data munging.
For services which run continually, have configurable printing for statistics. Or have a console which can examine dynamic structures. Or both.
Last winter I couldn't wrap my head around something Zeek was doing, so I ran it under Frida.
Any time I find myself using a debugger in the normal fashion, I find that I ask myself "should you be writing a test?" and not everybody can write tests at that level. In fact, I think running an interactive debugger is a good way to waste resources when you don't wanna write a test. I don't have much sympathy.