嵌入式ECL lisp错误处理

时间:2011-10-13 14:27:02

标签: error-handling lisp common-lisp ecl

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

我试着这样做:

cl_def_c_function_va(
    c_string_to_object("SYSTEM:UNIVERSAL-ERROR-HANDLER"),
    LispErrorHandler);

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

你能建议如何实现吗?

1 个答案:

答案 0 :(得分: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(第2条消息) http://thread.gmane.org/gmane.lisp.ecl.general/8526/focus=8529