additional 2 cents to the picture
2 main flows of debugger usage:
- walking
- catching
First one I walking within code, step by step, check logic, routing, values of variables, stack and so on
Second - run whole application or test and when breakpoint raised or debugger catched segfaults and so on - check status of program…
I always use debuggers, it does not mean that my code does not contain prints…
As you can see my Zig dev. env - JetBrains CLion (free for oss) + ZigBrains plugin + Gdb - Linux
On Windows - almost the same , just lldb instead of gdb (iirc)
CLion Debug configurations
take a look Debugging Zig (with a debugger) - it contains a lot of information