Jeśli w kodzie Emacs Lisp zasygnalizowany jest błąd, debug-on-error
pojawia t
się bufor śledzenia, który ułatwia ustalenie, gdzie wystąpił błąd. Jednak w przypadku błędów, które występują podczas asynchronicznego przetwarzania odpowiedzi z sieci, denerwujące byłoby pojawienie się bufora śledzenia wstecznego, więc wolę wychwycić błąd condition-case
i zarejestrować go.
Kiedy więc zajmuję się błędem condition-case
, czy istnieje sposób na uzyskanie dostępu do śledzenia wstecznego w momencie wystąpienia błędu? Wywołanie backtrace
funkcji pobiera ślad kodu wewnątrz modułu obsługi, czego nie szukam.
(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
wygenerowałbyś śledzenie stosu i dołączasz go do zgłaszanego błędu.
magithub-error
Myślę, że moja funkcja robi coś podobnego, ale nie jestem teraz przy komputerze. Może to pomóc niezależnie.