Breakpoints in Guile are represented by objects of type
<gdb:breakpoint>. New breakpoints can be created with the
make-breakpoint Guile function, and then added to GDB with the
register-breakpoint! Guile function.
This two-step approach is taken to separate out the side-effect of adding
the breakpoint to GDB from
Support is also provided to view and manipulate breakpoints created outside of Guile.
The following breakpoint-related procedures are provided by the
Create a new breakpoint at location, a string naming the
location of the breakpoint, or an expression that defines a watchpoint.
The contents can be any location recognized by the
or in the case of a watchpoint, by the
The breakpoint is initially marked as ‘invalid’.
The breakpoint is not usable until it has been registered with GDB
register-breakpoint!, at which point it becomes ‘valid’.
The result is the
<gdb:breakpoint> object representing the breakpoint.
The optional type denotes the breakpoint to create.
This argument can be either
and defaults to
The optional wp-class argument defines the class of watchpoint to
create, if type is
BP_WATCHPOINT. If a watchpoint class is
not provided, it is assumed to be a
The optional internal argument allows the breakpoint to become
invisible to the user. The breakpoint will neither be reported when
registered, nor will it be listed in the output from
(but will be listed with the
maint info breakpoints command).
If an internal flag is not provided, the breakpoint is visible
When a watchpoint is created, GDB will try to create a
hardware assisted watchpoint. If successful, the type of the watchpoint
is changed from
If not successful, the type of the watchpoint is left as
The available types are represented by constants defined in the
Normal code breakpoint.
Hardware assisted watchpoint. This value cannot be specified when creating the breakpoint.
Hardware assisted read watchpoint. This value cannot be specified when creating the breakpoint.
Hardware assisted access watchpoint. This value cannot be specified when creating the breakpoint.
The available watchpoint types represented by constants are defined in the
Read only watchpoint.
Write only watchpoint.
Add breakpoint, a
<gdb:breakpoint> object, to GDB’s
list of breakpoints. The breakpoint must have been created with
make-breakpoint. One cannot register breakpoints that have been
created outside of Guile. Once a breakpoint is registered it becomes
It is an error to register an already registered breakpoint.
The result is unspecified.
Remove breakpoint from GDB’s list of breakpoints. This also invalidates the Guile breakpoint object. Any further attempt to access the object will throw an exception.
If breakpoint was created from Guile with
it may be re-registered with GDB, in which case the breakpoint
becomes valid again.
Return a list of all breakpoints.
Each element of the list is a
#t if object is a
#t if breakpoint is valid,
Breakpoints created with
make-breakpoint are marked as invalid
until they are registered with GDB with
<gdb:breakpoint> object can become invalid
if the user deletes the breakpoint. In this case, the object still
exists, but the underlying breakpoint does not. In the cases of
watchpoint scope, the watchpoint remains valid even if execution of the
inferior leaves the scope of that watchpoint.
Return the breakpoint’s number — the identifier used by the user to manipulate the breakpoint.
Return the breakpoint’s type — the identifier used to determine the actual breakpoint type or use-case.
#t if the breakpoint is visible to the user
when hit, or when the ‘info breakpoints’ command is run.
Return the location of the breakpoint, as specified by
the user. It is a string. If the breakpoint does not have a location
(that is, it is a watchpoint) return
Return the breakpoint expression, as specified by the user. It is a string.
If the breakpoint does not have an expression (the breakpoint is not a
#t if the breakpoint is enabled, and
Set the enabled state of breakpoint to flag.
If flag is
#f it is disabled, otherwise it is enabled.
#t if the breakpoint is silent, and
Note that a breakpoint can also be silent if it has commands and the
first command is
silent. This is not reported by the
Set the silent state of breakpoint to flag.
If flag is
#f the breakpoint is made silent,
otherwise it is made non-silent (or noisy).
Return the ignore count for breakpoint.
Set the ignore count for breakpoint to count.
Return hit count of breakpoint.
Set the hit count of breakpoint to count. At present, count must be zero.
Return the thread-id for thread-specific breakpoint breakpoint. Return #f if breakpoint is not thread-specific.
Set the thread-id for breakpoint to thread-id.
If set to
#f, the breakpoint is no longer thread-specific.
If the breakpoint is Ada task-specific, return the Ada task id.
If the breakpoint is not task-specific (or the underlying
language is not Ada), return
Set the Ada task of breakpoint to task.
If set to
#f, the breakpoint is no longer task-specific.
Return the condition of breakpoint, as specified by the user.
It is a string. If there is no condition, return
Set the condition of breakpoint to condition,
which must be a string. If set to
#f then the breakpoint
Return the stop predicate of breakpoint.
set-breakpoint-stop! below in this section.
Set the stop predicate of breakpoint. The predicate
procedure takes one argument: the <gdb:breakpoint> object.
If this predicate is set to a procedure then it is invoked whenever
the inferior reaches this breakpoint. If it returns
or any non-
#f value, then the inferior is stopped,
otherwise the inferior will continue.
If there are multiple breakpoints at the same location with a
stop predicate, each one will be called regardless of the
return status of the previous. This ensures that all
predicates have a chance to execute at that location. In this scenario
if one of the methods returns
#t but the others return
#f, the inferior will still be stopped.
You should not alter the execution state of the inferior (i.e., step, next, etc.), alter the current frame context (i.e., change the current active frame), or alter, add or delete any breakpoint. As a general rule, you should not alter any data within GDB or the inferior at this time.
(define (my-stop? bkpt) (let ((int-val (parse-and-eval "foo"))) (value=? int-val 3))) (define bkpt (make-breakpoint "main.c:42")) (register-breakpoint! bkpt) (set-breakpoint-stop! bkpt my-stop?)
Return the commands attached to breakpoint as a string,
#f if there are none.