I think that your causation direction is reversed. Good debugging requires solid understanding of the syntax and behavior first. If you don't have it, then you're just flailing at the tool. I see people do this all the time: using debuggers to try to get information they could get trivially by reading the code, or randomly changing things in the code and retesting instead of carefully watching something in a debugger.
This was how most of my professors taught debugging, actually. Print statements. Reading the code is great but after a while it really does become hard to see where things go awry--especially in your own code. I think teaching students the basic concepts of debugging, break points, stepping, etc. will 1) clearly illustrate how bad print statement approaches are and 2) become annoying enough that it will make them better planners and code readers.