(use advice) (define (add foo bar) (+ foo bar)) (define debug-port (make-parameter (current-error-port))) (define (debug procedure param) (let* ((proc-info (procedure-information procedure)) (proc-name (or (and proc-info (car proc-info)) "unknown procedure")) (proc-args (or (and proc-info (cdr proc-info)) '()))) (advise 'before procedure (lambda (args) (let ((arg-pos (list-index (lambda (elt) (eq? elt param)) proc-args))) (and arg-pos (fprintf (debug-port) "~a (~a): ~S\n" proc-name param (list-ref args arg-pos)))))))) (debug add 'foo) (add 3 4) (add 2 5) (add (lambda () 3) 3)