我正在使用 CLisp 在 Lisp 的土地上工作,使用 Slimv 在 Vim 中编写代码,然后 alt-tabbing 到另一个终端窗口并使用 (load 'file.lisp) 将文件加载到 REPL,然后在回复。
当我在 REPL 中遇到错误时,有没有办法确定 file.lisp 中的哪一行发生了错误?我没有看到 REPL 错误输出中明确提到的行号,还有其他方法吗?
我发现了这个类似的问题,但唯一的答案是使用 Clisp 以外的东西,比如 sbcl、allegro 等:
谢谢!
我正在使用 CLisp 在 Lisp 的土地上工作,使用 Slimv 在 Vim 中编写代码,然后 alt-tabbing 到另一个终端窗口并使用 (load 'file.lisp) 将文件加载到 REPL,然后在回复。
当我在 REPL 中遇到错误时,有没有办法确定 file.lisp 中的哪一行发生了错误?我没有看到 REPL 错误输出中明确提到的行号,还有其他方法吗?
我发现了这个类似的问题,但唯一的答案是使用 Clisp 以外的东西,比如 sbcl、allegro 等:
谢谢!
简单的回答:只需编译代码而不是将其加载到 REPL:clisp -c file.lisp
中。编译器错误/警告显示行号。以这种方式调试它,然后加载到 REPL 中。现在已经足够好了。
If you just want to know what function it occurred in, you can use ":bt" at the REPL prompt when an error happens. It'll print out a GDB-like stacktrace that you can use to figure out which function the error happened at.
clisp 中的load
函数有一个:echo
选项,请参见实现说明。当您使用此选项时,您的文件将回显到输出。因此,当发生错误时,您可以看到相应的代码。对于您的情况,表达式为:
(load 'file.lisp :echo t)
一些额外的选项可能有用,例如:verbose
and :print
,在这种情况下,表达式为:
(load 'file.lisp :verbose t :print t :echo t)