/collects/unstable/scribblings/debug.scrbl

http://github.com/gmarceau/PLT · Racket · 98 lines · 77 code · 21 blank · 0 comment · 1 complexity · ff78e2d347a84cce86a44f91c277db96 MD5 · raw file

  1. #lang scribble/manual
  2. @(require scribble/eval "utils.rkt"
  3. (for-label racket unstable/debug unstable/syntax))
  4. @(define the-eval (make-base-eval))
  5. @(the-eval '(require unstable/debug))
  6. @title{Debugging}
  7. @defmodule[unstable/debug]
  8. @unstable[@author+email["Carl Eastlund" "cce@racket-lang.org"]]
  9. This module provides macros and functions for printing out debugging
  10. information.
  11. @defform/subs[
  12. (debug options ... expr)
  13. ([options (code:line #:name name-expr)
  14. (code:line #:source srcloc-expr)])
  15. ]{
  16. Writes debugging information about the evaluation of @racket[expr] to the
  17. current error port. The name and source location of the expression may be
  18. overridden by keyword options; their defaults are the syntactic form of the
  19. expression and its syntactic source location, respectively.
  20. @examples[#:eval the-eval
  21. (debug 0)
  22. (debug #:name "one, two, three" (values 1 2 3))
  23. (debug #:source (make-srcloc 'here 1 2 3 4)
  24. (error 'function "something went wrong"))
  25. ]
  26. }
  27. @defproc[(dprintf [fmt string?] [arg any/c] ...) void?]{
  28. Constructs a message in the same manner as @racket[format] and writes it to
  29. @racket[(current-error-port)], with indentation reflecting the number of nested
  30. @racket[debug] forms.
  31. @examples[#:eval the-eval
  32. (dprintf "level: ~a" 0)
  33. (debug (dprintf "level: ~a" 1))
  34. (debug (debug (dprintf "level: ~a" 2)))
  35. ]
  36. }
  37. @defform/subs[
  38. (debugf function-expr argument ...)
  39. ([argument argument-expr (code:line argument-keyword argument-expr)])
  40. ]{
  41. Logs debugging information for @racket[(#%app function-expr argument ...)],
  42. including the evaluation and results of the function and each argument.
  43. @examples[#:eval the-eval
  44. (debugf + 1 2 3)
  45. ]
  46. }
  47. @deftogether[(
  48. @defform[(begin/debug expr ...)]
  49. @defform*[[(define/debug id expr)
  50. (define/debug (head args) body ...+)]]
  51. @defform*[[(define/private/debug id expr)
  52. (define/private/debug (head args) body ...+)]]
  53. @defform*[[(define/public/debug id expr)
  54. (define/public/debug (head args) body ...+)]]
  55. @defform*[[(define/override/debug id expr)
  56. (define/override/debug (head args) body ...+)]]
  57. @defform*[[(define/augment/debug id expr)
  58. (define/augment/debug (head args) body ...+)]]
  59. @defform*[[(let/debug ([lhs-id rhs-expr] ...) body ...+)
  60. (let/debug loop-id ([lhs-id rhs-expr] ...) body ...+)]]
  61. @defform[(let*/debug ([lhs-id rhs-expr] ...) body ...+)]
  62. @defform[(letrec/debug ([lhs-id rhs-expr] ...) body ...+)]
  63. @defform[(let-values/debug ([(lhs-id ...) rhs-expr] ...) body ...+)]
  64. @defform[(let*-values/debug ([(lhs-id ...) rhs-expr] ...) body ...+)]
  65. @defform[(letrec-values/debug ([(lhs-id ...) rhs-expr] ...) body ...+)]
  66. @defform[(with-syntax/debug ([pattern stx-expr] ...) body ...+)]
  67. @defform[(with-syntax*/debug ([pattern stx-expr] ...) body ...+)]
  68. @defform[(parameterize/debug ([param-expr value-expr] ...) body ...+)]
  69. )]{
  70. These macros add logging based on @racket[debug] to the evaluation of
  71. expressions in @racket[begin], @racket[define], @racket[define/private],
  72. @racket[define/public], @racket[define/override], @racket[define/augment],
  73. @racket[let], @racket[let*], @racket[letrec], @racket[let-values],
  74. @racket[let*-values], @racket[letrec-values], @racket[with-syntax],
  75. @racket[with-syntax*], and @racket[parameterize].
  76. }
  77. @(close-eval the-eval)