我正在使用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,您可以使用它来确定错误发生在哪个函数上。
load
函数有一个:echo
选项,请参阅实现说明。当您使用此选项时,您的文件将被回显到输出。因此,当出现错误时,您可以看到相应的代码。对于您的情况,表达式为:
(load 'file.lisp :echo t)
一些额外的选项可能很有用,例如:verbose
和:print
,在这种情况下,表达式为:
(load 'file.lisp :verbose t :print t :echo t)