We present a debugger for concurrent logic programs that works on the channel-oriented principle: it allows program bugs to be diagnosed by probing values of variables, rather than by the more traditional method of tracing the execution of processes. A key feature of our debugger is that, like Shapiro's algorithmic debugging technique, it searches for a fault in an "intelligent" manner, asking the user pertinent questions about the program's correctness. Whereas algorithmic debugging searches for a faulty node in a proof tree, our debugger searches for a faulty node in the program's process graph. We claim that this allows an observed bug to be rapidly traced back to the fault of which it is a symptom. A prototype implementation has been developed for the KLIC dialect of KL1.
The full paper is available in gzipped PostScript format.