You are looking at historical revision 29586 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) → unspecifiedTrace 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) → unspecifiedDebug 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/syslog
[syntax] (debug/syslog expressions) → unspecifiedDebug to syslog.
- expressions
- The expressions to debug (cf. `debug' supra)
(define-syntax
debug/syslog
(er-macro-transformer
(lambda (expression rename compare)
`(let ((port (make-syslog-port)))
(with-error-output-to-port
port
(lambda ()
(when (debug?)
(debug ,@(cdr expression))
(flush-output port))))))))
About this egg
Author
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.
Colophon
Documented by cock.