Wenn im Emacs-Lisp-Code ein Fehler gemeldet wird und dies der Fall debug-on-error
ist t
, erhalte ich einen Rückverfolgungspuffer, mit dem sich leicht herausfinden lässt, wo der Fehler aufgetreten ist. Bei Fehlern, die bei der asynchronen Verarbeitung einer Antwort aus dem Netzwerk auftreten, wäre es jedoch ärgerlich, wenn der Rückverfolgungspuffer eingeblendet würde. Daher würde ich den Fehler lieber mit abfangen condition-case
und protokollieren.
Gibt condition-case
es eine Möglichkeit, bei der Behandlung eines Fehlers in auf die Rückverfolgung zuzugreifen, wenn der Fehler auftritt? Das Aufrufen der backtrace
Funktion ruft die Rückverfolgung des Codes im Handler ab, was nicht das ist, wonach ich suche.
(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
einen Stack-Trace generieren und ihn an den Fehler anhängen, den er verursacht.
magithub-error
Ich denke, meine Funktion macht etwas Ähnliches, aber ich bin gerade nicht an einem Computer. Es kann trotzdem helfen.