Embedded ECL lisp error handling
任务:在我的项目中嵌入 ECL lisp,设置错误处理和详细的错误报告(发生的位置、错误类型等)
我试图这样做:
1 2 3 | cl_def_c_function_va( c_string_to_object("SYSTEM:UNIVERSAL-ERROR-HANDLER"), LispErrorHandler); |
ECL 没有关于其嵌入式 API 的文档,也没有关于错误处理的文档...
你能建议如何实现吗?
没有全局错误处理程序,因为这不是 Common Lisp 哲学。如果您想处理错误,请使用 lisp 方式。
1) 创建一个函数,该函数使用 HANDLER-CASE 或 HANDLER-BIND 来设置适当的错误处理程序并捕获要评估的表单周围的错误。类似
(DEFUN MY-EVAL (FORM)
(处理案例(评估表)
(错误(C)...)
(我的错误(C)...)
...))
这个函数可以在你的 C 代码中定义并被调用。
2) 使用 ECL 创建的捕获所有错误的函数。最重要的是 si_safe_eval(form, environment, error_value)。它在 ENVIRONMENT(通常为 Cnil)中评估 lisp FORM,并在遇到错误时返回其输出或 ERROR_VALUE。
一些使用一种或另一种技术的示例:
http://thread.gmane.org/gmane.lisp.ecl.general/5365(第二条消息)
http://thread.gmane.org/gmane.lisp.ecl.general/8526/focus=8529