嵌入式 ECL lisp 错误处理

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