(from the printf() function in C) Used to describe debugging work done by inserting commands that output more or less carefully chose status information at key points in the program flow, observing that information and deducing what's wrong, based on that information.

Usually considered amateurish and inferior to the use of a real debugger, but has the advantage that it is always a workable option, e.g. when there is no (or no free, or no working) debugger available. Also, it offers greater flexibility than the limited interface of a debugger. The downside is that it usually takes longer (sometimes much longer) to pinpoint the problem.