Якщо сигнализируется помилка в коді 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))))))
do-something-that-might-fail
стек-стежу та додали б її до помилки, яку вона викликає.
magithub-error
функція робить щось подібне до цього, я думаю, але я зараз не за комп’ютером. Це може допомогти незалежно.