You are looking at historical revision 32372 of this page. It may differ significantly from its current revision.

debug

Some trivial debugging macros

Abstract

According to Joe Armstrong, "The great gods of programming said, 'Thou shalt put printf statements in your program at the point where you think it’s gone wrong, recompile, and run it.'"

Documentation

debug?

[parameter] debug? → #t

`debug?' turns on or off debugging output, depending on whether it is set to #t or #f; respectively.

(define debug? (make-parameter #t))

trace

[syntax] (trace f) → unspecified

Trace the input to and output from a function.

f
The function to be traced
(define-syntax
  trace
  (er-macro-transformer
    (lambda (expression rename compare)
      (match-let
        (((_ f) expression))
        (let ((%set! (rename 'set!))
              (%lambda (rename 'lambda))
              (%call-with-values (rename 'call-with-values))
              (%apply (rename 'apply))
              (%format (rename 'format))
              (%values (rename 'values))
              (%let (rename 'let))
              (%f (rename 'f))
              (%when (rename 'when))
              (%debug? (rename 'debug?)))
          `(,%when
            (,%debug?)
            (,%let
             ((,%f ,f))
             (,%set!
              ,f
              (,%lambda
               x
               (,%format (current-error-port) ";; Arguments to ~a: ~a~%" ',f x)
               (,%let
                ((return-values
                   (,%call-with-values
                    (,%lambda () (,%apply ,%f x))
                    (,%lambda x x))))
                (,%format
                 (current-error-port)
                 ";; Values from ~a: ~a~%"
                 ',f
                 return-values)
                (,%apply ,%values return-values)))))))))))

debug

[syntax] (debug expressions) → unspecified

Debug the expressions to stderr by pretty-printing each expression and their evaluations.

expressions
The expressions to be debugged
(define-syntax
  debug
  (syntax-rules
    ()
    ((_ x ...)
     (with-output-to-port
       (current-error-port)
       (lambda ()
         (when (debug?)
               (pp `(,(if (or (boolean? 'x)
                              (char? 'x)
                              (number? 'x)
                              (string? 'x)
                              (vector? 'x))
                        x
                        `(x =>
                            ,(handle-exceptions
                               exn
                               (let ((message
                                       ((condition-property-accessor 'exn 'message) exn))
                                     (arguments
                                       ((condition-property-accessor 'exn 'arguments)
                                        exn)))
                                 (format
                                   "Error: ~a~a"
                                   message
                                   (if (null? arguments)
                                     ""
                                     (format
                                       ": ~a"
                                       (string-join (map ->string arguments) ", ")))))
                               x)))
                     ...))))))))

debug-priority

[parameter] debug-priority → prio/debug

The priority associated with debug/syslog

(define debug-priority (make-parameter prio/debug))

debug/syslog

[syntax] (debug/syslog expressions) → unspecified

Debug to syslog.

expressions
The expressions to debug (cf. `debug' supra)
(define-syntax
  debug/syslog
  (ir-macro-transformer
    (lambda (expression rename inject)
      `(let ((port (make-syslog-port)))
         (with-error-output-to-port
           port
           (lambda ()
             (when (debug?)
                   (debug ,@(cdr expression))
                   (flush-output port))))))))

About this egg

Author

Peter Danenberg

Repository

https://github.com/klutometis/debug

License

BSD

Dependencies

Versions

0.1
Version 0.1
0.1.1
Version 0.1.1
0.1.2
BSD
0.2
Add a `debug?'-parameter.
0.3
Add exception-guard; document.
0.3.1
Add "Error: ..."
0.3.2
Add arguments in errors.
0.3.3
Don't do arguments if we don't have to.
0.3.4
With a note about cock-utils
0.3.5
Add test-exit.
0.3.6
Disable an offending test.
0.3.7
Self-evaluating scalars
0.3.8
Fix tests
0.3.9
Fix debug/syslog.
0.3.10
Default-priority -> debug-priority
0.3.11
Use setup-helper-cock.
0.3.12
Remove the dependency on setup-helper-cock.
0.3.13
Drop setup-helper-cock.
0.3.14
Use ports, don't merely import it.
0.3.15
Use hahn.

Colophon

Documented by hahn.