CLIsp REPL 错误输出:如何查找发生错误的文件中的行号?
我正在研究 Land of Lisp,使用 CLisp,使用 Slimv 在 Vim 中编写代码,然后使用 alt-tab 键切换到另一个终端窗口,并使用 (load 'file.lisp) 将文件加载到 REPL 中,然后在重复。
当我在 REPL 中遇到错误时,有什么方法可以确定 file.lisp 中的哪一行发生错误?我没有看到 REPL 错误输出中明确提到的行号,还有其他方法吗?
我发现了这个类似的问题,但唯一的答案是使用 Clisp 以外的东西,如 sbcl、allegro 等:
谢谢!
I'm working through Land of Lisp, using CLisp, writing the code in Vim with Slimv, then alt-tabbing to another terminal window and loading the file into the REPL with (load 'file.lisp), then running the programs at the REPL.
When I get an error in the REPL, is there any way to ascertain what line in file.lisp the error occurred on? I don't see line numbers mentioned explicitly in the REPL error output, is there any other way?
I found this similar question, but the only answer says to use something other than Clisp like sbcl, allegro, etc.:
How can I improve clisp error messages?
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
简单答案:只需编译代码,而不是将其加载到 REPL 中:
clisp -c file.lisp
。编译器错误/警告显示行号。以这种方式调试它,然后加载到 REPL 中。现在已经足够好了。Simple answer: Just compile the code instead of loading it into the REPL:
clisp -c file.lisp
. Compiler error/warnings show the line numbers. Debug it that way, then load into the REPL. Good enough for now.如果你只是想知道它发生在哪个函数中,可以在发生错误时在 REPL 提示符处使用“:bt”。它会打印出类似 GDB 的堆栈跟踪,您可以使用它来找出错误发生在哪个函数上。
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
选项,请参阅 实施说明。当您使用此选项时,您的文件将回显到输出。因此,当发生错误时,您可以看到相应的代码。对于您的情况,表达式将是:一些额外的选项可能有用,例如
:verbose
和:print
,在这种情况下,表达式将是:The
load
function in clisp has an:echo
option, see the implementation notes. When you use this option your files gets echoed to the output. Hence when an error occurs you can see the corresponding code. For your case the expression would be:Some extra options may be useful, such as
:verbose
and:print
, in which case the expression would be: