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

时间:2015-01-08 15:21:11

标签: elisp emacs24

这个javascript代码如何使用elisp写入throw / catch错误?

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

2 个答案:

答案 0 :(得分:2)

Emacs Lisp区分条件,一个高级别的面向对象的构造,以及非本地退出,这是一个允许过早退出作用域的低级构造。

使用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))))

答案 1 :(得分:1)

您可以使用:

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

有关处理Emacs中的错误的更多信息,请here