Racket的内置debug仅限打印异常的上下文信息(即栈追踪) errortrace库提供更详细的信息,racket/trace库提供简单的上下文。

(require racket/trace)导入trace库

这里的是racket/trace库,而不是racket/base,他模仿了chez scheme的跟踪程序。

(trace id ...) 每个id必须绑定一个trace环境中的一个过程。每个 id 都set!为一个新过程,该过程通过 current-trace-notify 打印调用的参数和结果来跟踪过程调用和返回。如果返回值有多个,每个值在单独的一行开始显示。

当追踪的过程相互调用的时候,嵌套调用只展示嵌套前缀,当嵌套深度超过了10,只会显示一个数表示嵌套深度。