Lisp代码调试

时间:2010-07-15 16:20:07

标签: debugging clojure lisp

During web searching,我发现了以下注释:仍然可以使用传统的Lisp调试实践。

  • 传统的调试方法是什么?
  • 通常,有哪些工具用于调试lisp(有/没有emacs)?

5 个答案:

答案 0 :(得分:4)

我不知道比尔的意思,但IME:

通常,您的编辑器将连接一个正在运行的实例。你可以立即编译函数将它们插入到运行的映像中 - 因为Lisp有自己的编译器,你只是告诉正在运行的映像来读取和编译一小段文本。或者你可以直接运行函数,看看他们做了什么。

当抛出异常时(或者发出条件信号,如果你有幸遇到有条件的方言),调试器会显示堆栈跟踪并让你决定如何继续。

Lisp和其他高级编译语言之间的主要区别在于,在Lisp中,您基本上总是在附加调试器的情况下编写代码。

答案 1 :(得分:4)

由于在问题中标记了clojure,我将给出我们的观点。

clojure编译器生成的类文件包括基于行和基于方法的调试信息,因此任何java调试器都可以直接与clojure代码进行互操作,包括断点和对象检查。

如果您使用emacs / slime作为开发环境,那么最近已经包含了与slime的调试器的集成。由于文档有点稀疏,最好直接查看github上的支持范围。

答案 2 :(得分:3)

在emacs中运行edebug-defun,你会发现lisp是神奇的。

答案 3 :(得分:2)

在我称之为“传统的Lisp调试技术”的内容中:

  • 调试打印输出
  • 函数跟踪(每次调用跟踪函数 打印时带有与调用深度相对应的缩进,返回时返回 价值被打印)。
  • 显式调用图像内调试器
  • 由于错误而在图像内调试器中结束(例如,尝试添加整数和符号)

答案 4 :(得分:0)

基本上就是添加代码以便在运行时打印出值,这样你就可以看到发生了什么。