在 elisp 中尝试捕获和打印跟踪

Try-catch and print trace in elisp

这个 javascript 代码示例如何使用 elisp 编写的 throw/catch 错误?

throw new Error("Boom!!!")
catch(error){
    console.log(err.stack)
}

您可以使用:

(condition-case ex
    (error "Boom!!") 
  ('error (backtrace)))

提供了有关在 Emacs 中处理错误的更多信息here

Emacs Lisp 区分 conditions,一个高级的面向对象构造,和 non-local exits,一个低级的允许提前退出作用域的构造。

使用condition-case捕获条件:

(condition-case nil
    (error "Error!")
  (error (message "Caught error")))

非本地存在使用 catch:

处理
(progn
  (catch 'catcher
    (throw 'catcher 42))
  (message "Caught .. or perhaps not"))

一般来说,如果您希望参与 Emacs 的错误处理协议,您应该使用条件,如果您只需要提前退出,则应该使用 catch/throw

为了计算回溯,您可以使用函数 backtrace:

(catch 'catcher
  (throw 'catcher
    (with-temp-buffer
      (backtrace)
      (buffer-string))))