Clisp REPL错误输出:如何在发生错误的文件中找到行号



我正在使用CLisp,使用Slimv在Vim中编写代码,然后切换到另一个终端窗口,使用(load'file.lsp)将文件加载到REPL中,然后在REPL上运行程序。

当我在REPL中遇到错误时,有什么方法可以确定错误发生在file.lisp的哪一行吗?我没有看到REPL错误输出中明确提到行号,还有其他方法吗?

我发现了这个类似的问题,但唯一的答案是使用Clisp以外的东西,比如sbcl、allegro等:

如何改进clisp错误消息?

谢谢!

简单的答案:只需编译代码,而不是将其加载到REPL:clisp -c file.lisp中。编译器错误/警告显示行号。以这种方式调试它,然后加载到REPL中。现在已经足够了。

如果你只想知道它发生在哪个函数中,当发生错误时,你可以在REPL提示符下使用":bt"。它将打印出一个类似GDB的stacktrace,您可以使用它来确定错误发生在哪个函数上。

clisp中的load函数有一个:echo选项,请参阅实现说明。当您使用此选项时,您的文件将被回显到输出。因此,当出现错误时,您可以看到相应的代码。对于您的情况,表达式为:
(load 'file.lisp :echo t)

一些额外的选项可能很有用,例如:verbose:print,在这种情况下,表达式为:

(load 'file.lisp :verbose t :print t :echo t)

相关内容

最新更新