12

我目前正在尝试学习 common lisp,并且一直在使用 sbcl(我希望这是一个不错的实现选择。)

来自 ruby​​ 和 irb,我发现此时自动将每个错误都移到调试器中有点烦人。我玩的时候有没有办法暂时关闭它。

4

2 回答 2

13

Common Lisp 有一个变量*debugger-hook*,可以绑定/设置到一个函数。

* (aref "123" 10)

debugger invoked on a SB-INT:INVALID-ARRAY-INDEX-ERROR:
  Index 10 out of bounds for (SIMPLE-ARRAY CHARACTER
                              (3)), should be nonnegative and <3.

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

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

(SB-INT:INVALID-ARRAY-INDEX-ERROR "123" 10 3 NIL)
0] 0

* (defun debug-ignore (c h) (declare (ignore h)) (print c) (abort))

DEBUG-IGNORE
* (setf *debugger-hook* #'debug-ignore)

#<FUNCTION DEBUG-IGNORE>
* (aref "123" 10)

#<SB-INT:INVALID-ARRAY-INDEX-ERROR {1002A661D1}>
* 
于 2010-06-19T07:13:20.173 回答
10

有一个--disable-debugger命令行选项,例如:

$ sbcl --disable-debugger

从手册页:

默认情况下,当 SBCL 遇到错误时,它会进入内置调试器,允许交互式诊断和可能的调解。此选项禁用调试器,导致错误打印回溯并以状态 1 退出——这是一种更适合批处理的操作模式。有关详细信息,请参阅 SB-EXT:DISABLE-DEBUGGER 的用户手册。

还有一些您可能会发现有用--noinform--noprintCL 选项。

于 2010-06-19T06:37:54.557 回答