如果在Emacs Lisp代码中以表示错误,并且debug-on-error
为t
,则我将获得一个回溯缓冲区,可以很容易地找出发生错误的位置。但是,对于异步处理来自网络的响应时发生的错误,弹出回溯缓冲区会很烦人,所以我宁愿捕获错误condition-case
并记录下来。
因此,当我处理中的错误时condition-case
,是否有办法在错误发生时访问回溯?调用该backtrace
函数将获取处理程序内部代码的回溯,这不是我想要的。
(condition-case e
(do-something-that-might-fail)
(error
(message "%s"
;; This gets the wrong backtrace!
(with-temp-buffer
(let ((standard-output (current-buffer)))
(backtrace)
(buffer-string))))))
对于以类似方式管理堆栈的任何语言,这都是一个普遍的问题。处理该错误的一种方法是发出已附加堆栈信息的错误信号。即在您的情况下,您将
—
wvxvw 16-10-28
do-something-that-might-fail
生成堆栈跟踪并将其附加到它引起的错误上。
debbugs.gnu.org/cgi/bugreport.cgi?bug=24617#8有一个建议(我自己还没有尝试过)
—
npostavs,2016年
magithub-error
功能与我认为的功能类似,但是我现在不在电脑旁。可能会有所帮助。