发生错误时如何使Clozure退出
How to make Clozure exit when an error occurs
我正在尝试 运行 CCL 下的程序,这样当程序由于任何原因完成 运行ning 时,它应该退出回到操作系统。当前正在使用此命令行(在 Windows 上):
\ccl\wx86cl -l test.lisp -e (quit)
当程序成功 运行 正常完成时退出,但如果出现错误,例如内存不足,它最终进入调试器。你如何告诉 Clozure 在出现错误时也退出?
您不仅要捕获所有错误,而且还希望在 INVOKE-DEBUGGER
is called. You can set *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
那么,你又回到了shell。
注意 BREAK
总是进入调试器,因为它将 *debugger-hook*
绑定到 NIL(这是故意的,用于调试)。
我正在尝试 运行 CCL 下的程序,这样当程序由于任何原因完成 运行ning 时,它应该退出回到操作系统。当前正在使用此命令行(在 Windows 上):
\ccl\wx86cl -l test.lisp -e (quit)
当程序成功 运行 正常完成时退出,但如果出现错误,例如内存不足,它最终进入调试器。你如何告诉 Clozure 在出现错误时也退出?
您不仅要捕获所有错误,而且还希望在 INVOKE-DEBUGGER
is called. You can set *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
那么,你又回到了shell。
注意 BREAK
总是进入调试器,因为它将 *debugger-hook*
绑定到 NIL(这是故意的,用于调试)。