mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 03:40:34 +02:00
206 lines
6.8 KiB
Text
206 lines
6.8 KiB
Text
@page
|
|
@node Debugging
|
|
@chapter Debugging Infrastructure
|
|
|
|
@deffn {Scheme Procedure} debug-options-interface [setting]
|
|
@deffnx {C Function} scm_debug_options (setting)
|
|
Option interface for the debug options. Instead of using
|
|
this procedure directly, use the procedures @code{debug-enable},
|
|
@code{debug-disable}, @code{debug-set!} and @code{debug-options}.
|
|
@end deffn
|
|
|
|
|
|
@section Using Traps
|
|
|
|
@deffn {Scheme Procedure} with-traps thunk
|
|
@deffnx {C Function} scm_with_traps (thunk)
|
|
Call @var{thunk} with traps enabled.
|
|
@end deffn
|
|
|
|
@deffn {Scheme Procedure} debug-object? obj
|
|
@deffnx {C Function} scm_debug_object_p (obj)
|
|
Return @code{#t} if @var{obj} is a debug object.
|
|
@end deffn
|
|
|
|
|
|
@section Capturing the Stack or Innermost Stack Frame
|
|
|
|
When an error occurs in a running program, or the program hits a
|
|
breakpoint, its state at that point can be represented by a @dfn{stack}
|
|
of all the evaluations and procedure applications that are logically in
|
|
progress at that time, each of which is known as a @dfn{frame}. The
|
|
programmer can learn more about the program's state at the point of
|
|
interruption or error by inspecting the stack and its frames.
|
|
|
|
@deffn {Scheme Procedure} make-stack obj . args
|
|
@deffnx {C Function} scm_make_stack (obj, args)
|
|
Create a new stack. If @var{obj} is @code{#t}, the current
|
|
evaluation stack is used for creating the stack frames,
|
|
otherwise the frames are taken from @var{obj} (which must be
|
|
either a debug object or a continuation).
|
|
|
|
@var{args} should be a list containing any combination of
|
|
integer, procedure and @code{#t} values.
|
|
|
|
These values specify various ways of cutting away uninteresting
|
|
stack frames from the top and bottom of the stack that
|
|
@code{make-stack} returns. They come in pairs like this:
|
|
@code{(@var{inner_cut_1} @var{outer_cut_1} @var{inner_cut_2}
|
|
@var{outer_cut_2} @dots{})}.
|
|
|
|
Each @var{inner_cut_N} can be @code{#t}, an integer, or a
|
|
procedure. @code{#t} means to cut away all frames up to but
|
|
excluding the first user module frame. An integer means to cut
|
|
away exactly that number of frames. A procedure means to cut
|
|
away all frames up to but excluding the application frame whose
|
|
procedure matches the specified one.
|
|
|
|
Each @var{outer_cut_N} can be an integer or a procedure. An
|
|
integer means to cut away that number of frames. A procedure
|
|
means to cut away frames down to but excluding the application
|
|
frame whose procedure matches the specified one.
|
|
|
|
If the @var{outer_cut_N} of the last pair is missing, it is
|
|
taken as 0.
|
|
@end deffn
|
|
|
|
@deffn {Scheme Procedure} last-stack-frame obj
|
|
@deffnx {C Function} scm_last_stack_frame (obj)
|
|
Return a stack which consists of a single frame, which is the
|
|
last stack frame for @var{obj}. @var{obj} must be either a
|
|
debug object or a continuation.
|
|
@end deffn
|
|
|
|
|
|
@section Examining the Stack
|
|
|
|
@deffn {Scheme Procedure} stack? obj
|
|
@deffnx {C Function} scm_stack_p (obj)
|
|
Return @code{#t} if @var{obj} is a calling stack.
|
|
@end deffn
|
|
|
|
@deffn {Scheme Procedure} stack-id stack
|
|
@deffnx {C Function} scm_stack_id (stack)
|
|
Return the identifier given to @var{stack} by @code{start-stack}.
|
|
@end deffn
|
|
|
|
@deffn {Scheme Procedure} stack-length stack
|
|
@deffnx {C Function} scm_stack_length (stack)
|
|
Return the length of @var{stack}.
|
|
@end deffn
|
|
|
|
@deffn {Scheme Procedure} stack-ref stack index
|
|
@deffnx {C Function} scm_stack_ref (stack, index)
|
|
Return the @var{index}'th frame from @var{stack}.
|
|
@end deffn
|
|
|
|
@deffn {Scheme Procedure} display-backtrace stack port [first [depth]]
|
|
@deffnx {C Function} scm_display_backtrace (stack, port, first, depth)
|
|
Display a backtrace to the output port @var{port}. @var{stack}
|
|
is the stack to take the backtrace from, @var{first} specifies
|
|
where in the stack to start and @var{depth} how much frames
|
|
to display. Both @var{first} and @var{depth} can be @code{#f},
|
|
which means that default values will be used.
|
|
@end deffn
|
|
|
|
|
|
@section Examining Stack Frames
|
|
|
|
@deffn {Scheme Procedure} frame? obj
|
|
@deffnx {C Function} scm_frame_p (obj)
|
|
Return @code{#t} if @var{obj} is a stack frame.
|
|
@end deffn
|
|
|
|
@deffn {Scheme Procedure} frame-number frame
|
|
@deffnx {C Function} scm_frame_number (frame)
|
|
Return the frame number of @var{frame}.
|
|
@end deffn
|
|
|
|
@deffn {Scheme Procedure} frame-previous frame
|
|
@deffnx {C Function} scm_frame_previous (frame)
|
|
Return the previous frame of @var{frame}, or @code{#f} if
|
|
@var{frame} is the first frame in its stack.
|
|
@end deffn
|
|
|
|
@deffn {Scheme Procedure} frame-next frame
|
|
@deffnx {C Function} scm_frame_next (frame)
|
|
Return the next frame of @var{frame}, or @code{#f} if
|
|
@var{frame} is the last frame in its stack.
|
|
@end deffn
|
|
|
|
@deffn {Scheme Procedure} frame-source frame
|
|
@deffnx {C Function} scm_frame_source (frame)
|
|
Return the source of @var{frame}.
|
|
@end deffn
|
|
|
|
@deffn {Scheme Procedure} frame-procedure? frame
|
|
@deffnx {C Function} scm_frame_procedure_p (frame)
|
|
Return @code{#t} if a procedure is associated with @var{frame}.
|
|
@end deffn
|
|
|
|
@deffn {Scheme Procedure} frame-procedure frame
|
|
@deffnx {C Function} scm_frame_procedure (frame)
|
|
Return the procedure for @var{frame}, or @code{#f} if no
|
|
procedure is associated with @var{frame}.
|
|
@end deffn
|
|
|
|
@deffn {Scheme Procedure} frame-arguments frame
|
|
@deffnx {C Function} scm_frame_arguments (frame)
|
|
Return the arguments of @var{frame}.
|
|
@end deffn
|
|
|
|
@deffn {Scheme Procedure} frame-evaluating-args? frame
|
|
@deffnx {C Function} scm_frame_evaluating_args_p (frame)
|
|
Return @code{#t} if @var{frame} contains evaluated arguments.
|
|
@end deffn
|
|
|
|
@deffn {Scheme Procedure} frame-overflow? frame
|
|
@deffnx {C Function} scm_frame_overflow_p (frame)
|
|
Return @code{#t} if @var{frame} is an overflow frame.
|
|
@end deffn
|
|
|
|
@deffn {Scheme Procedure} frame-real? frame
|
|
@deffnx {C Function} scm_frame_real_p (frame)
|
|
Return @code{#t} if @var{frame} is a real frame.
|
|
@end deffn
|
|
|
|
@deffn {Scheme Procedure} display-application frame [port [indent]]
|
|
@deffnx {C Function} scm_display_application (frame, port, indent)
|
|
Display a procedure application @var{frame} to the output port
|
|
@var{port}. @var{indent} specifies the indentation of the
|
|
output.
|
|
@end deffn
|
|
|
|
|
|
@section Decoding Memoized Source Expressions
|
|
|
|
@deffn {Scheme Procedure} memoized? obj
|
|
@deffnx {C Function} scm_memoized_p (obj)
|
|
Return @code{#t} if @var{obj} is memoized.
|
|
@end deffn
|
|
|
|
@deffn {Scheme Procedure} unmemoize m
|
|
@deffnx {C Function} scm_unmemoize (m)
|
|
Unmemoize the memoized expression @var{m},
|
|
@end deffn
|
|
|
|
@deffn {Scheme Procedure} memoized-environment m
|
|
@deffnx {C Function} scm_memoized_environment (m)
|
|
Return the environment of the memoized expression @var{m}.
|
|
@end deffn
|
|
|
|
|
|
@section Starting a New Stack
|
|
|
|
@deffn {Scheme Syntax} start-stack id exp
|
|
Evaluate @var{exp} on a new calling stack with identity @var{id}. If
|
|
@var{exp} is interrupted during evaluation, backtraces will not display
|
|
frames farther back than @var{exp}'s top-level form. This macro is a
|
|
way of artificially limiting backtraces and stack procedures, largely as
|
|
a convenience to the user.
|
|
@end deffn
|
|
|
|
|
|
@c Local Variables:
|
|
@c TeX-master: "guile.texi"
|
|
@c End:
|