SBCL错误消息:有什么方法可以改进吗?

Sam*_*ese 7 compiler-errors sbcl common-lisp

我已经用Common Lisp开发了近一年了,这真的开始让我感到紧张.我开始使用CLISP编程CL,但后来我转而使用SBCL来提高速度.我做了很多相当低级的东西,所以我需要与很多C代码接口.我非常喜欢CL的增量开发方面(我不使用Emacs - 我在Vim中运行SLIMV),但我发现自己的开发速度比在Python,Perl,C甚至NASM中都要慢.问题的根源在于SBCL的错误消息.我曾被迫搜索近500行代码,因为SBCL决定给我一个ERROR: Invalid number of arguments on foreign function #< some memory address >.没有指定调用什么函数,没有行号,没有.最近,我有了The loaded code expects an incompatible layout for class SB-PRETTY:PRETTY-STREAM.随意的喜悦.代码在CLISP上运行FINE,但是在SBCL上出现了一些模糊的错误.有没有办法让这些消息更具信息量?我已经写了近6年的C和汇编了,甚至他们也会给你一个行号.我见过的唯一一半合理的SBCL错误是读者错误,这几乎是无用的,因为它们通常相当于缺少括号.同样,是否有任何声明/命令行开关可用于更改此设置?我甚至可以在这一点上编写我自己的错误打印机.

编辑:一个例子,(sb-ext:restrict-compiler-policy 'debug 3)在我的〜/ .sbclrc中(使用--load而不是--script,所以.sbclrc被加载)

debugger invoked on a SB-INT:SIMPLE-PROGRAM-ERROR in thread
#<THREAD "main thread" RUNNING {AB09931}>:
  invalid number of arguments: 0

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

(SB-KERNEL::INVALID-ARG-COUNT-ERROR-HANDLER
 #<unavailable argument>
 #.(SB-SYS:INT-SAP #XB78CDAE0)
 #<SB-ALIEN-INTERNALS:ALIEN-VALUE :SAP #XB78CD7DC :TYPE (*
                                                         (STRUCT
                                                          SB-VM::OS-CONTEXT-T-STRUCT))>
 (79))
0] print
(SB-KERNEL::INVALID-ARG-COUNT-ERROR-HANDLER
    #<unavailable argument>
    #.(SB-SYS:INT-SAP #XB78CDAE0)
    #<SB-ALIEN-INTERNALS:ALIEN-VALUE :SAP #XB78CD7DC :TYPE (*
                                                            (STRUCT
                                                             SB-VM::OS-CONTEXT-T-STRUCT))>
    (79))
0] down
(SB-KERNEL:INTERNAL-ERROR
    #.(SB-SYS:INT-SAP #XB78CD7DC)
    #<unavailable argument>)
1] down
("foreign function: #x805FCBB")
2] down

Bottom of stack.
Run Code Online (Sandbox Code Playgroud)

不完全提供信息.

geo*_*car 5

我想你正在寻找: (sb-ext:restrict-compiler-policy 'debug 3)

您可以将它放入您~/.sbclrc的REPL中,而SBCL的调试器(特别是在SLIME中)将产生更多有用的结果.


小智 4

这是“定制”构建脚本的发行版的常见问题;Arch Linux 是一个常犯。从 sbcl.org 安装二进制文件是最可靠的方法。如果想要最新和最好的,那么从源代码构建是相当容易的。