嵌入式ECL lisp错误处理

The*_*ect 1 lisp error-handling common-lisp ecl

任务:在我的项目中嵌入ECL lisp,设置错误处理和详细的错误报告(发生的地方,错误类型等)

我试着这样做:

cl_def_c_function_va(
    c_string_to_object("SYSTEM:UNIVERSAL-ERROR-HANDLER"),
    LispErrorHandler);
Run Code Online (Sandbox Code Playgroud)

ECL没有关于其嵌入式API的文档,也没有关于错误处理的文档......

你能建议如何实现吗?

Jua*_*njo 6

没有全局错误处理程序,因为这不是Common Lisp哲学.如果您想处理错误,请使用lisp方式.

1)创建一个使用HANDLER-CASE或HANDLER-BIND的函数来设置适当的错误处理程序并捕获要评估的表单周围的错误.就像是

(DEFUN MY-EVAL(表格)(HANDLER-CASE(EVAL FORM)(错误(C)......)(MY-ERROR(C)...)......))

此函数可以在C代码中定义并调用.

2)使用ECL创建的捕获所有错误的函数.最重要的是si_safe_eval(form,environment,error_value).它评估环境中的lisp FORM(通常为Cnil)并返回其输出或ERROR_VALUE(如果它有一些错误).

一些使用一种或另一种技术的例子:http: //thread.gmane.org/gmane.lisp.ecl.general/5365(第二条消息) http://thread.gmane.org/gmane.lisp.ecl.general/8526 /聚焦= 8529