1

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

我试图这样做:

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

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

你能建议如何实施吗?

4

1 回答 1

6

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

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

(DEFUN MY-EVAL (FORM) (HANDLER-CASE (EVAL FORM) (ERROR (C) ...) (MY-ERROR (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/焦点=8529

于 2011-10-13T21:30:23.650 回答