IMO there's a place for both. A print statement will reveal a flaw in the programmer's thinking regarding the control flow of the program and the state at that time. If a print statement gives something unexpected, you know exactly where to look in the debugger. If it gives you what you expected, it reveals the problem may be elsewhere