I think the interesting thing with debuggers, though, is that I relied heavily on debuggers back when I was relatively new to programming (maybe the first 10-15 years or so), but once I started to feel like I knew what I was doing--and the stuff I was doing became a lot more complicated--debuggers started to feel a lot less useful and even frustrating or limiting... particularly so given that to actually make a debugger work really relies on you buying your entire project into some unified concept of how execution will happen, as the ability to step across IPC/VM/network boundaries is otherwise a pipe dream. I thereby only feel like I get value out of stepping through some code only once every year or two, and gdb is more than good enough; otherwise, I always make sure I have really good mechanisms for logging and error handling, and leave the debuggers for when I'm teaching someone how to code.