Modern debuggers let you step through code line by line. Set a breakpoint where you suspect the bug. When execution pauses:
- Inspect variable values
- Check the call stack
- Step into functions to see what they do
- Watch expressions to track changes
Debuggers take longer to set up than print statements but reveal more. Use them for complex bugs that prints can't solve.