как отключить отладчик в sbcl - PullRequest
10 голосов
/ 19 июня 2010

В настоящее время я пытаюсь выучить обычный lisp и использую sbcl (надеюсь, это достойный вариант реализации.)

Исходя из ruby ​​и irb, я считаю, что автоматическое переключение на отладчик при каждой ошибке немного раздражает в настоящее время. Есть ли способ временно отключить его, когда я играю?

Ответы [ 2 ]

11 голосов
/ 19 июня 2010

Common Lisp имеет переменную * отладочный хук *, которую можно привязать / установить для функции.

* (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}>
* 
8 голосов
/ 19 июня 2010

Существует опция командной строки --disable-debugger, например:

$ sbcl --disable-debugger

Со страницы руководства:

По умолчанию, когда SBCL обнаруживает ошибку, он вводитвстроенный отладчик, позволяющий интерактивную диагностику и возможное заступничество.Эта опция отключает отладчик, вызывая ошибки, чтобы напечатать обратную трассировку и выйти вместо нее со статусом 1 - это режим работы, лучше подходящий для пакетной обработки.Подробнее см. Руководство пользователя SB-EXT: DISABLE-DEBUGGER.

Существуют также опции --noinform и --noprint CL, которые могут оказаться полезными.

...