任务:在我的项目中嵌入ECL lisp,设置错误处理和详细的错误报告(发生的位置,错误类型等)
我试着这样做:
cl_def_c_function_va(
c_string_to_object("SYSTEM:UNIVERSAL-ERROR-HANDLER"),
LispErrorHandler);
ECL没有关于其嵌入式API的文档,也没有关于错误处理的文档…
你能建议如何实现吗?
没有全局错误处理程序,因为这不是通用Lisp哲学。如果你想处理错误,用lisp的方式。
1)创建一个函数,该函数使用HANDLER-CASE或HANDLER-BIND来设置适当的错误处理程序,并捕获要计算的表单周围的错误。就像
(DEFUN MY-EVAL (FORM))handler-case (eval形式)(错误(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