Next: Finish Breakpoints in Python, Previous: Line Tables In Python, Up: Python API [Contents][Index]
Python code can manipulate breakpoints via the gdb.Breakpoint
class.
A breakpoint can be created using one of the two forms of the
gdb.Breakpoint
constructor. The first one accepts a string
like one would pass to the break
(see Setting Breakpoints) and watch
(see Setting Watchpoints) commands, and can be used to
create both breakpoints and watchpoints. The second accepts separate Python
arguments similar to Explicit Locations, and can only be used to create
breakpoints.
Create a new breakpoint according to spec
, which is a string naming the
location of a breakpoint, or an expression that defines a watchpoint. The
string should describe a location in a format recognized by the break
command (see Setting Breakpoints) or, in the case of a
watchpoint, by the watch
command
(see Setting Watchpoints).
The optional type
argument specifies the type of the breakpoint to create,
as defined below.
The optional wp_class
argument defines the class of watchpoint to create,
if type
is gdb.BP_WATCHPOINT
. If wp_class
is omitted, it
defaults to gdb.WP_WRITE
.
The optional internal
argument allows the breakpoint to become invisible
to the user. The breakpoint will neither be reported when created, nor will it
be listed in the output from info breakpoints
(but will be listed with
the maint info breakpoints
command).
The optional temporary
argument makes the breakpoint a temporary
breakpoint. Temporary breakpoints are deleted after they have been hit. Any
further access to the Python breakpoint after it has been hit will result in a
runtime error (as that breakpoint has now been automatically deleted).
The optional qualified
argument is a boolean that allows interpreting
the function passed in spec
as a fully-qualified name. It is equivalent
to break
’s -qualified
flag (see Linespec Locations and
Explicit Locations).
This second form of creating a new breakpoint specifies the explicit
location (see Explicit Locations) using keywords. The new breakpoint will
be created in the specified source file source
, at the specified
function
, label
and line
.
internal
, temporary
and qualified
have the same usage as
explained previously.
The available types are represented by constants defined in the gdb
module:
gdb.BP_BREAKPOINT
Normal code breakpoint.
gdb.BP_WATCHPOINT
Watchpoint breakpoint.
gdb.BP_HARDWARE_WATCHPOINT
Hardware assisted watchpoint.
gdb.BP_READ_WATCHPOINT
Hardware assisted read watchpoint.
gdb.BP_ACCESS_WATCHPOINT
Hardware assisted access watchpoint.
The available watchpoint types represented by constants are defined in the
gdb
module:
gdb.WP_READ
Read only watchpoint.
gdb.WP_WRITE
Write only watchpoint.
gdb.WP_ACCESS
Read/Write watchpoint.
The gdb.Breakpoint
class can be sub-classed and, in
particular, you may choose to implement the stop
method.
If this method is defined in a sub-class of gdb.Breakpoint
,
it will be called when the inferior reaches any location of a
breakpoint which instantiates that sub-class. If the method returns
True
, the inferior will be stopped at the location of the
breakpoint, otherwise the inferior will continue.
If there are multiple breakpoints at the same location with a
stop
method, each one will be called regardless of the
return status of the previous. This ensures that all stop
methods have a chance to execute at that location. In this scenario
if one of the methods returns True
but the others return
False
, 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.
Example stop
implementation:
class MyBreakpoint (gdb.Breakpoint): def stop (self): inf_val = gdb.parse_and_eval("foo") if inf_val == 3: return True return False
True
if this Breakpoint
object is valid, False
otherwise. A 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.Breakpoint
object. Any further access to this object’s attributes or methods will raise an error.True
if the breakpoint is enabled, and False
otherwise. This attribute is writable. You can use it to enable or disable the breakpoint.This attribute is True
if the breakpoint is silent, and
False
otherwise. This attribute is writable.
Note that a breakpoint can also be silent if it has commands and the
first command is silent
. This is not reported by the
silent
attribute.
True
if the breakpoint is pending, and False
otherwise. See Set Breaks. This attribute is read-only.
None
. This attribute is writable.None
. This attribute is writable.info breakpoints
’ command is run. This attribute is not writable.is_valid
function, will result in an error after the breakpoint has been hit (as it has been automatically deleted). This attribute is not writable.None
. This attribute is not writable.None
. This attribute is not writable.None
. This attribute is writable.None
. This attribute is writable.Next: Finish Breakpoints in Python, Previous: Line Tables In Python, Up: Python API [Contents][Index]