我正在尝试学习常见的lisp,而且我一直在使用sbcl(我希望这是一个不错的实现选择。)
来自ruby和irb我发现自动移动到调试器上,此时每个错误都有点烦人。我玩的时候有没有办法暂时关掉它。
答案 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选项很有用。