【发布时间】:2016-07-14 15:14:41
【问题描述】:
将 Emacs/geiser 与 Racket(不是 DrRacket)一起使用,我如何设置断点,然后单步执行代码,在断点处暂停?例如,我有这个代码:
(define (powerset4 lst)
(if (null? lst)
'(())
(append-map (lambda (x)
(begin
(fprintf (current-output-port) "~s ~s ~s\n" x lst x)
(list x (cons (car lst) x))))
(powerset4 (cdr lst)))))
我想在begin 序列内停下来看看发生了什么以及值是什么。不依赖 ye 'ol printf 技巧也很好,即也跟踪某些参数。同样,我在 Emacs 中使用 Geiser。实际上,如果我能更好地使用它们,我会改用 Guile 或 Chicken(Geiser 语言)。
【问题讨论】:
-
设置断点、单步执行等是通常与调试器或 IDE 而非语言相关联的功能。对于
#lang racket,标准调试器内置于 DrRacket。有一个debug模块 [docs.racket-lang.org/debug/… 和一个不稳定的库 [docs.racket-lang.org/unstable/… 可以作为 Racket 语言程序的一部分。这些可能比“打印”更易于管理。 -
@147pm 使用 DrRacket 中的图形调试器来获取断点。 docs.racket-lang.org/drracket/debugger.html
-
特别问的问题不是 DrRacket。
-
@147pm 遗憾的是,目前 DrRacket 中内置了唯一的 Racket 调试器。虽然如果你想写一个命令行调试器,我们也很乐意。 :D