এ গিয়ে Emacs সহ সুবিধার ডিবাগ একটি ভাল পরিমাণ উপলব্ধ M-x toggle-debug-on-error
, M-x toggle-debug-on-quit
সংকেত ডিবাগ (যা পাঠিয়ে ব্যবহার করা যেতে পারে USR2
বাইরে থেকে এ গিয়ে Emacs করা), debug-on-entry
(ক ফাংশনের), debug-on-message
(যখন একটি বার্তা একটি নির্দিষ্ট regexp ম্যাচ এইজন্য) এবং পরিশেষে, debug
নিজেই বিকল্প হিসেবে সাথে একটি ফাংশন ইনস্ট্রুমেন্ট C-u C-M-x
।
উভয় debug
এবং edebug
পরিদর্শন করার জন্য যথেষ্ট কার্যকারিতা প্রস্তাব রাষ্ট্র এ গিয়ে Emacs যখন কোডটি তুমি আগ্রহী এ, হিট মূল্যায়নের e
এবং একটি মান লিখুন।
যাইহোক, edebug
চালিত ক্রিয়াকলাপের জায়গায় লাফ দেওয়ার সময় এবং যেখানে আপনাকে দেখতে হবে তার একটি ক্লু দেয় (যা নির্বোধ যেহেতু আপনি ইতিমধ্যে জেনে debug
গেছেন যে আপনি ঠিক কীভাবে চালিত হয়েছেন), এটি একেবারেই করবেন না। আমি আবিষ্কারের পরে একটি ছোট হ্যাকটি টেনেছি যে যখনই debug
কোনও বাফারকে মূল্যায়ন করে, এটি ত্রুটির সাথে যুক্ত বিন্দুর মান নির্ধারণ করে; অন্য কথায় বাফারে এই তথ্যটি ব্যবহার করা আপনাকে ব্যাকট্রেসে একটি লাইন নম্বর দিতে পারে!
(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)))
এটির সাথে শিরোনামের মূল প্রশ্নের উত্তর দেওয়া উচিত। প্রথমদিকে ব্যাকট্র্যাস পাওয়ার ক্ষেত্রে আপনার সমস্যা হিসাবে, আমি দরকারী ধারণার বাইরে।
nil
debug-on-error
? যে সাহায্য করে না?