如何在sbcl中关闭调试器

时间:2010-06-19 06:25:28

标签: debugging lisp common-lisp sbcl

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

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

2 个答案:

答案 0 :(得分:10)

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}>
* 

答案 1 :(得分:8)

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

$ sbcl --disable-debugger

从手册页:

  

默认情况下,当SBCL遇到时   错误,它进入内置   调试器,允许交互   诊断和可能的代祷。   此选项禁用调试器,   导致错误打印回溯   并以状态1退出 -   这是一种更好的运作方式   适合批量处理。见   SB-EXT用户手册:禁用 - 调试器   详情。

您可能会发现--noinform--noprint CL选项很有用。