Move 'backtrace' from subr.el to backtrace.el
* lisp/subr.el (backtrace, backtrace--print-frame): Remove functions. * lisp/emacs-lisp/backtrace.el (backtrace-backtrace): Remove function. (backtrace): New function. (backtrace-to-string): Make argument optional. * doc/lispref/debugging.texi (Internals of Debugger): Update description of 'backtrace' function.
This commit is contained in:
parent
ca98377280
commit
83af893fc0
3 changed files with 17 additions and 33 deletions
|
@ -678,20 +678,19 @@ of @code{debug} (@pxref{Invoking the Debugger}).
|
|||
@cindex run time stack
|
||||
@cindex call stack
|
||||
This function prints a trace of Lisp function calls currently active.
|
||||
This is the function used by @code{debug} to fill up the
|
||||
@file{*Backtrace*} buffer. It is written in C, since it must have access
|
||||
to the stack to determine which function calls are active. The return
|
||||
value is always @code{nil}.
|
||||
The trace is identical to the one that @code{debug} would show in the
|
||||
@file{*Backtrace*} buffer. The return value is always nil.
|
||||
|
||||
In the following example, a Lisp expression calls @code{backtrace}
|
||||
explicitly. This prints the backtrace to the stream
|
||||
@code{standard-output}, which, in this case, is the buffer
|
||||
@samp{backtrace-output}.
|
||||
|
||||
Each line of the backtrace represents one function call. The line shows
|
||||
the values of the function's arguments if they are all known; if they
|
||||
are still being computed, the line says so. The arguments of special
|
||||
forms are elided.
|
||||
Each line of the backtrace represents one function call. The line
|
||||
shows the function followed by a list of the values of the function's
|
||||
arguments if they are all known; if they are still being computed, the
|
||||
line consists of a list containing the function and its unevaluated
|
||||
arguments. Long lists or deeply nested structures may be elided.
|
||||
|
||||
@smallexample
|
||||
@group
|
||||
|
@ -708,7 +707,7 @@ forms are elided.
|
|||
@group
|
||||
----------- Buffer: backtrace-output ------------
|
||||
backtrace()
|
||||
(list ...computing arguments...)
|
||||
(list 'testing (backtrace))
|
||||
@end group
|
||||
(progn ...)
|
||||
eval((progn (1+ var) (list 'testing (backtrace))))
|
||||
|
@ -739,7 +738,7 @@ example would look as follows:
|
|||
@group
|
||||
----------- Buffer: backtrace-output ------------
|
||||
(backtrace)
|
||||
(list ...computing arguments...)
|
||||
(list 'testing (backtrace))
|
||||
@end group
|
||||
(progn ...)
|
||||
(eval (progn (1+ var) (list 'testing (backtrace))))
|
||||
|
|
|
@ -891,14 +891,18 @@ followed by `backtrace-print-frame', once for each stack frame."
|
|||
|
||||
;;; Backtrace printing
|
||||
|
||||
(defun backtrace-backtrace ()
|
||||
;;;###autoload
|
||||
(defun backtrace ()
|
||||
"Print a trace of Lisp function calls currently active.
|
||||
Output stream used is value of `standard-output'."
|
||||
(princ (backtrace-to-string (backtrace-get-frames 'backtrace-backtrace))))
|
||||
(princ (backtrace-to-string (backtrace-get-frames 'backtrace)))
|
||||
nil)
|
||||
|
||||
(defun backtrace-to-string(frames)
|
||||
(defun backtrace-to-string(&optional frames)
|
||||
"Format FRAMES, a list of `backtrace-frame' objects, for output.
|
||||
Return the result as a string."
|
||||
Return the result as a string. If FRAMES is nil, use all
|
||||
function calls currently active."
|
||||
(unless frames (setq frames (backtrace-get-frames 'backtrace-to-string)))
|
||||
(let ((backtrace-fontify nil))
|
||||
(with-temp-buffer
|
||||
(backtrace-mode)
|
||||
|
|
19
lisp/subr.el
19
lisp/subr.el
|
@ -4687,25 +4687,6 @@ The properties used on SYMBOL are `composefunc', `sendfunc',
|
|||
(put symbol 'hookvar (or hookvar 'mail-send-hook)))
|
||||
|
||||
|
||||
(defun backtrace--print-frame (evald func args flags)
|
||||
"Print a trace of a single stack frame to `standard-output'.
|
||||
EVALD, FUNC, ARGS, FLAGS are as in `mapbacktrace'."
|
||||
(princ (if (plist-get flags :debug-on-exit) "* " " "))
|
||||
(cond
|
||||
((and evald (not debugger-stack-frame-as-list))
|
||||
(cl-prin1 func)
|
||||
(if args (cl-prin1 args) (princ "()")))
|
||||
(t
|
||||
(cl-prin1 (cons func args))))
|
||||
(princ "\n"))
|
||||
|
||||
(defun backtrace ()
|
||||
"Print a trace of Lisp function calls currently active.
|
||||
Output stream used is value of `standard-output'."
|
||||
(let ((print-level (or print-level 8))
|
||||
(print-escape-control-characters t))
|
||||
(mapbacktrace #'backtrace--print-frame 'backtrace)))
|
||||
|
||||
(defun backtrace-frames (&optional base)
|
||||
"Collect all frames of current backtrace into a list.
|
||||
If non-nil, BASE should be a function, and frames before its
|
||||
|
|
Loading…
Add table
Reference in a new issue