You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何单步调试Common Lisp代码并查看表单返回值?

Common Lisp调试器单步执行并显示返回值的实现方法

Common Lisp的ANSI标准并未标准化调试器的单步追踪细节,这类显示每个表单返回值的功能属于具体实现的扩展特性,不同Common Lisp实现的支持方式和效果存在差异。

针对SBCL的实现方案

SBCL默认的step在编译代码下信息有限,但切换到解释模式后,单步执行时会显示每个表单的求值结果:

  1. 定义测试用阶乘函数:
(defun fact (n)
  (if (<= n 0)
      1
      (* n (fact (- n 1)))))
  1. 设置解释执行模式(避免编译代码丢失调试信息):
(setf sb-ext:*evaluator-mode* :interpret)
  1. 启动单步调试:
(step (fact 5))

在调试器提示符下输入n(代表next,单步执行),会逐行显示每个表单的求值过程及返回值:

Evaluating: (<= 5 0)
=> NIL
Evaluating: (- 5 1)
=> 4
Evaluating: (FACT 4)
... 后续递归步骤会依次显示对应表单的返回值

针对CMUCL的实现方案

CMUCL的step工具同样支持解释模式下的单步返回值显示,操作流程与SBCL类似:

  1. 定义阶乘函数(同上)。
  2. 确保函数以解释方式加载(默认未编译的函数即为解释模式)。
  3. 执行(step (fact 5)),在调试器中输入n单步,即可看到每个表单的求值结果。

其他实现的差异

像CLISP、CCL(Clozure CL)这类实现,默认的step工具就会自动显示每个表单的返回值,无需额外配置。

内容的提问来源于stack exchange,提问作者Alessandro Bertulli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:22:43