Put this early in your lisp source file. You can turn off debugging
printouts from individual functions by removing their :names
from
the *dbg-ids*
variable. See the tests for
achieve-all
for examples of the use of these functions.
The difference between them is that dbg1
returns the value that you
give it, so you can sneak it in to show what is happening as you are
using or returning a value.
(defvar *dbg-ids* '()
"Identifiers you are debugging")
(setf *dbg-ids* '(:achieve-all :mock-achieve-one
:achieve-one :mock-achieve-all))
(defun dbg (id indent format-string &rest args)
(when (member id *dbg-ids*)
(fresh-line *debug-io*)
(dotimes (i (length indent)) (princ " " *debug-io*))
(apply #'format *debug-io*
(concatenate 'string "[~a] " format-string)
id args)))
(defun dbg1 (id indent format-string value)
"Passes VALUE to dbg, also gives VALUE as result."
(progn
(dbg id indent format-string value)
value))