Якщо сигнализируется помилка в коді 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функція робить щось подібне до цього, я думаю, але я зараз не за комп’ютером. Це може допомогти незалежно.