Emacs tesisler dahil ayıklama iyi bir miktar sağlar M-x toggle-debug-on-error
, M-x toggle-debug-on-quit
(göndererek kullanılabilir sinyali hata ayıklama USR2
dışarıdan Emacs), debug-on-entry
(a fonksiyonun) debug-on-message
, (bir mesajın belirli bir regexp maçı görünce) ve son olarak debug
alternatif olarak kendisini ile bir fonksiyonun gösterilmesi C-u C-M-x
.
Hem debug
ve edebug
tespit etmek lazım işlevsellik sunan devlet sen ilgilenen yılında, isabet o kodu değerlendirirken Emacs e
bir ifade girerek.
Bununla birlikte, edebug
enstrümanlı fonksiyondaki yere atlar ve bu nedenle size nereye bakmanız gerektiğine dair bir ipucu verirken (tam olarak neyi enstrüman kullandığınızı zaten bildiğinizden bu kadar saçmadır), debug
bunu hiç yapmaz. debug
Bir arabellek değerlendirdiğinde, hata ile ilişkili nokta değerini yayar keşfettikten sonra küçük bir kesmek çıkardı ; başka bir deyişle, bu bilgiyi arabellekte kullanmak geri izlemede bir satır numarası verebilir!
(with-eval-after-load 'debug
(defun debugger-setup-buffer (debugger-args)
"Initialize the `*Backtrace*' buffer for entry to the debugger.
That buffer should be current already."
(setq buffer-read-only nil)
(erase-buffer)
(set-buffer-multibyte t) ;Why was it nil ? -stef
(setq buffer-undo-list t)
(let ((standard-output (current-buffer))
(print-escape-newlines t)
(print-level 8)
(print-length 50))
(backtrace))
(goto-char (point-min))
(delete-region (point)
(progn
(search-forward "\n debug(")
(forward-line (if (eq (car debugger-args) 'debug)
2 ; Remove implement-debug-on-entry frame.
1))
(point)))
(insert "Debugger entered")
;; lambda is for debug-on-call when a function call is next.
;; debug is for debug-on-entry function called.
(pcase (car debugger-args)
((or `lambda `debug)
(insert "--entering a function:\n"))
;; Exiting a function.
(`exit
(insert "--returning value: ")
(setq debugger-value (nth 1 debugger-args))
(prin1 debugger-value (current-buffer))
(insert ?\n)
(delete-char 1)
(insert ? )
(beginning-of-line))
;; Debugger entered for an error.
(`error
(insert "--Lisp error: ")
(prin1 (nth 1 debugger-args) (current-buffer))
(insert ?\n))
;; debug-on-call, when the next thing is an eval.
(`t
(insert "--beginning evaluation of function call form:\n"))
;; User calls debug directly.
(_
(insert ": ")
(prin1 (if (eq (car debugger-args) 'nil)
(cdr debugger-args) debugger-args)
(current-buffer))
(insert ?\n)))
;; After any frame that uses eval-buffer,
;; insert a line that states the buffer position it's reading at.
(save-excursion
(let ((tem eval-buffer-list))
(while (and tem
(re-search-forward "^ eval-\\(buffer\\|region\\)(" nil t))
(beginning-of-line)
(insert (format "Error at line %d in %s: "
(with-current-buffer (car tem)
(line-number-at-pos (point)))
(with-current-buffer (car tem)
(buffer-name))))
(pop tem))))
(debugger-make-xrefs)))
Bununla başlıktaki orijinal soru cevaplanmalıdır. İlk etapta geri çekilme sorununa gelince, yararlı fikirlerim kalmadı.
nil
debug-on-error
mi? Bu yardımcı olmuyor mu?