任务:在我的项目中嵌入ECL lisp,设置错误处理和详细的错误报告(发生的地方,错误类型等)
我试着这样做:
cl_def_c_function_va(
c_string_to_object("SYSTEM:UNIVERSAL-ERROR-HANDLER"),
LispErrorHandler);
ECL没有关于其嵌入式API的文档,也没有关于错误处理的文档...
你能建议如何实现吗?
答案 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