Как заставить Clozure выйти при возникновении ошибки
Я пытаюсь запустить программу под CCL, чтобы, когда программа по какой-либо причине заканчивала работу, она возвращалась обратно в операционную систему. В настоящее время используется эта командная строка (в Windows):
\ccl\wx86cl -l test.lisp -e (quit)
Это происходит, когда программа успешно запускается до нормального завершения, но если есть ошибка, например, нехватка памяти, она попадает в отладчик. Как вы говорите Clozure также выходить при возникновении ошибки?
1 ответ
Вы не только хотите отлавливать все ошибки, но также хотите предотвратить вход в отладчик, когда INVOKE-DEBUGGER
называется. Вы можете установить *DEBUGGER-HOOK*
к функции, которая выходит из необработанных ошибок.
$ ./bin/ccl/lx86cl64
Clozure Common Lisp Version 1.11.5/v1.11.5 (LinuxX8664)
For more information about CCL, please see http://ccl.clozure.com.
CCL is free software. It is distributed under the terms of the Apache
Licence, Version 2.0.
? *debugger-hook*
NIL
? (setf *debugger-hook*
(lambda (error hook)
(declare (ignore hook))
(format *error-output* "Crash: ~a" error)
(quit)))
#<Anonymous Function #x302000998C3F>
Теперь протестируйте его с необработанной ошибкой:
? (error "Oh no")
Crash: Oh no
Затем вы вернулись к раковине.
Заметить, что BREAK
всегда входит в отладчик, потому что он связывает *debugger-hook*
в NIL (это специально для отладки).