Как заставить Clozure закрыться при возникновении ошибки

Я пытаюсь запустить программу под CCL, поэтому, когда программа по какой-либо причине завершает работу, она должна вернуться в операционную систему. В настоящее время используется эта командная строка (в Windows):

\ccl\wx86cl -l test.lisp -e (quit)

Это завершается, когда программа успешно работает до нормального завершения, но если есть ошибка, например. не хватает памяти, он попадает в отладчик. Как вы говорите Clozure, чтобы он также закрывался при возникновении ошибки?


person rwallace    schedule 19.10.2018    source источник


Ответы (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 (это сделано намеренно). , для отладки).

person coredump    schedule 19.10.2018