The specific reason I reach for print debugging first is it works literally everywhere across all technology stacks. I regularly work with different projects written in different languages. Printing works across all of them and the logs are easy to aggregate across different parts of the stack (microservices or other service composition patterns) giving you a broader range of data than you typically get from a step debugger. I've personally found that step debuggers are more likely to create Heisenbugs. Especially in multi-threaded applications or dealing with race conditions.