Next: Finish Breakpoints in Python, Previous: Line Tables In Python, Up: Python API
Python code can manipulate breakpoints via the gdb.Breakpoint
class.
Create a new breakpoint according to spec, which is a string naming the location of the breakpoint, or an expression that defines a watchpoint. The contents can be any location recognized by the
break
command, or in the case of a watchpoint, by thewatch
command. The optional type denotes the breakpoint to create from the types defined later in this chapter. This argument can be eithergdb.BP_BREAKPOINT
orgdb.BP_WATCHPOINT
; it defaults togdb.BP_BREAKPOINT
. 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 frominfo breakpoints
(but will be listed with themaint 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 wp_class argument defines the class of watchpoint to create, if type isgdb.BP_WATCHPOINT
. If a watchpoint class is not provided, it is assumed to be agdb.WP_WRITE
class.
The
gdb.Breakpoint
class can be sub-classed and, in particular, you may choose to implement thestop
method. If this method is defined in a sub-class ofgdb.Breakpoint
, it will be called when the inferior reaches any location of a breakpoint which instantiates that sub-class. If the method returnsTrue
, 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 allstop
methods have a chance to execute at that location. In this scenario if one of the methods returnsTrue
but the others returnFalse
, 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
The available watchpoint types represented by constants are defined in the
gdb
module:
gdb.WP_READ
gdb.WP_WRITE
gdb.WP_ACCESS
Return
True
if thisBreakpoint
object is valid,False
otherwise. ABreakpoint
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.
Permanently deletes the gdb breakpoint. This also invalidates the Python
Breakpoint
object. Any further access to this object's attributes or methods will raise an error.
This attribute is
True
if the breakpoint is enabled, andFalse
otherwise. This attribute is writable. You can use it to enable or disable the breakpoint.
This attribute is
True
if the breakpoint is silent, andFalse
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 thesilent
attribute.
If the breakpoint is thread-specific, this attribute holds the thread id. If the breakpoint is not thread-specific, this attribute is
None
. This attribute is writable.
If the breakpoint is Ada task-specific, this attribute holds the Ada task id. If the breakpoint is not task-specific (or the underlying language is not Ada), this attribute is
None
. This attribute is writable.
This attribute holds the ignore count for the breakpoint, an integer. This attribute is writable.
This attribute holds the breakpoint's number — the identifier used by the user to manipulate the breakpoint. This attribute is not writable.
This attribute holds the breakpoint's type — the identifier used to determine the actual breakpoint type or use-case. This attribute is not writable.
This attribute tells whether the breakpoint is visible to the user when set, or when the ‘info breakpoints’ command is run. This attribute is not writable.
This attribute indicates whether the breakpoint was created as a temporary breakpoint. Temporary breakpoints are automatically deleted after that breakpoint has been hit. Access to this attribute, and all other attributes and functions other than the
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.
The available types are represented by constants defined in the gdb
module:
gdb.BP_BREAKPOINT
gdb.BP_WATCHPOINT
gdb.BP_HARDWARE_WATCHPOINT
gdb.BP_READ_WATCHPOINT
gdb.BP_ACCESS_WATCHPOINT
This attribute holds the hit count for the breakpoint, an integer. This attribute is writable, but currently it can only be set to zero.
This attribute holds 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) the attribute's value is
None
. This attribute is not writable.
This attribute holds a breakpoint expression, as specified by the user. It is a string. If the breakpoint does not have an expression (the breakpoint is not a watchpoint) the attribute's value is
None
. This attribute is not writable.