blob: 72b52bb4d29a81fd0f24656e1afb53dd51168dde [file] [log] [blame]
<html lang="en">
<head>
<title>Breakpoints In Python - Debugging with GDB</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Debugging with GDB">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Python-API.html#Python-API" title="Python API">
<link rel="prev" href="Line-Tables-In-Python.html#Line-Tables-In-Python" title="Line Tables In Python">
<link rel="next" href="Finish-Breakpoints-in-Python.html#Finish-Breakpoints-in-Python" title="Finish Breakpoints in Python">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988-2019 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software'' and ``Free Software Needs
Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,''
and with the Back-Cover Texts as in (a) below.
(a) The FSF's Back-Cover Text is: ``You are free to copy and modify
this GNU Manual. Buying copies from GNU Press supports the FSF in
developing GNU and promoting software freedom.''
-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
</head>
<body>
<div class="node">
<a name="Breakpoints-In-Python"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Finish-Breakpoints-in-Python.html#Finish-Breakpoints-in-Python">Finish Breakpoints in Python</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Line-Tables-In-Python.html#Line-Tables-In-Python">Line Tables In Python</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Python-API.html#Python-API">Python API</a>
<hr>
</div>
<h5 class="subsubsection">23.2.2.30 Manipulating breakpoints using Python</h5>
<p><a name="index-breakpoints-in-python-2384"></a><a name="index-gdb_002eBreakpoint-2385"></a>
Python code can manipulate breakpoints via the <code>gdb.Breakpoint</code>
class.
<p>A breakpoint can be created using one of the two forms of the
<code>gdb.Breakpoint</code> constructor. The first one accepts a string
like one would pass to the <code>break</code>
(see <a href="Set-Breaks.html#Set-Breaks">Setting Breakpoints</a>) and <code>watch</code>
(see <a href="Set-Watchpoints.html#Set-Watchpoints">Setting Watchpoints</a>) commands, and can be used to
create both breakpoints and watchpoints. The second accepts separate Python
arguments similar to <a href="Explicit-Locations.html#Explicit-Locations">Explicit Locations</a>, and can only be used to create
breakpoints.
<div class="defun">
&mdash; Function: <b>Breakpoint.__init__</b> (<var>spec </var><span class="roman">[</span><var>, type </var><span class="roman">][</span><var>, wp_class </var><span class="roman">][</span><var>, internal </var><span class="roman">][</span><var>, temporary </var><span class="roman">][</span><var>, qualified </var><span class="roman">]</span>)<var><a name="index-Breakpoint_002e_005f_005finit_005f_005f-2386"></a></var><br>
<blockquote><p>Create a new breakpoint according to <var>spec</var>, 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 <code>break</code>
command (see <a href="Set-Breaks.html#Set-Breaks">Setting Breakpoints</a>) or, in the case of a
watchpoint, by the <code>watch</code> command
(see <a href="Set-Watchpoints.html#Set-Watchpoints">Setting Watchpoints</a>).
<p>The optional <var>type</var> argument specifies the type of the breakpoint to create,
as defined below.
<p>The optional <var>wp_class</var> argument defines the class of watchpoint to create,
if <var>type</var> is <code>gdb.BP_WATCHPOINT</code>. If <var>wp_class</var> is omitted, it
defaults to <code>gdb.WP_WRITE</code>.
<p>The optional <var>internal</var> 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 <code>info breakpoints</code> (but will be listed with
the <code>maint info breakpoints</code> command).
<p>The optional <var>temporary</var> 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).
<p>The optional <var>qualified</var> argument is a boolean that allows interpreting
the function passed in <code>spec</code> as a fully-qualified name. It is equivalent
to <code>break</code>'s <code>-qualified</code> flag (see <a href="Linespec-Locations.html#Linespec-Locations">Linespec Locations</a> and
<a href="Explicit-Locations.html#Explicit-Locations">Explicit Locations</a>).
</blockquote></div>
<div class="defun">
&mdash; Function: <b>Breakpoint.__init__</b> (<span class="roman">[</span><var> source </var><span class="roman">][</span><var>, function </var><span class="roman">][</span><var>, label </var><span class="roman">][</span><var>, line </var><span class="roman">]</span><var>, </var><span class="roman">][</span><var> internal </var><span class="roman">][</span><var>, temporary </var><span class="roman">][</span><var>, qualified </var><span class="roman">]</span>)<var><a name="index-Breakpoint_002e_005f_005finit_005f_005f-2387"></a></var><br>
<blockquote><p>This second form of creating a new breakpoint specifies the explicit
location (see <a href="Explicit-Locations.html#Explicit-Locations">Explicit Locations</a>) using keywords. The new breakpoint will
be created in the specified source file <var>source</var>, at the specified
<var>function</var>, <var>label</var> and <var>line</var>.
<p><var>internal</var>, <var>temporary</var> and <var>qualified</var> have the same usage as
explained previously.
</p></blockquote></div>
<p>The available types are represented by constants defined in the <code>gdb</code>
module:
<a name="index-BP_005fBREAKPOINT-2388"></a>
<dl><dt><code>gdb.BP_BREAKPOINT</code><a name="index-gdb_002eBP_005fBREAKPOINT-2389"></a><dd>Normal code breakpoint.
<p><a name="index-BP_005fWATCHPOINT-2390"></a><br><dt><code>gdb.BP_WATCHPOINT</code><a name="index-gdb_002eBP_005fWATCHPOINT-2391"></a><dd>Watchpoint breakpoint.
<p><a name="index-BP_005fHARDWARE_005fWATCHPOINT-2392"></a><br><dt><code>gdb.BP_HARDWARE_WATCHPOINT</code><a name="index-gdb_002eBP_005fHARDWARE_005fWATCHPOINT-2393"></a><dd>Hardware assisted watchpoint.
<p><a name="index-BP_005fREAD_005fWATCHPOINT-2394"></a><br><dt><code>gdb.BP_READ_WATCHPOINT</code><a name="index-gdb_002eBP_005fREAD_005fWATCHPOINT-2395"></a><dd>Hardware assisted read watchpoint.
<p><a name="index-BP_005fACCESS_005fWATCHPOINT-2396"></a><br><dt><code>gdb.BP_ACCESS_WATCHPOINT</code><a name="index-gdb_002eBP_005fACCESS_005fWATCHPOINT-2397"></a><dd>Hardware assisted access watchpoint.
</dl>
<p>The available watchpoint types represented by constants are defined in the
<code>gdb</code> module:
<a name="index-WP_005fREAD-2398"></a>
<dl><dt><code>gdb.WP_READ</code><a name="index-gdb_002eWP_005fREAD-2399"></a><dd>Read only watchpoint.
<p><a name="index-WP_005fWRITE-2400"></a><br><dt><code>gdb.WP_WRITE</code><a name="index-gdb_002eWP_005fWRITE-2401"></a><dd>Write only watchpoint.
<p><a name="index-WP_005fACCESS-2402"></a><br><dt><code>gdb.WP_ACCESS</code><a name="index-gdb_002eWP_005fACCESS-2403"></a><dd>Read/Write watchpoint.
</dl>
<div class="defun">
&mdash; Function: <b>Breakpoint.stop</b> (<var>self</var>)<var><a name="index-Breakpoint_002estop-2404"></a></var><br>
<blockquote><p>The <code>gdb.Breakpoint</code> class can be sub-classed and, in
particular, you may choose to implement the <code>stop</code> method.
If this method is defined in a sub-class of <code>gdb.Breakpoint</code>,
it will be called when the inferior reaches any location of a
breakpoint which instantiates that sub-class. If the method returns
<code>True</code>, the inferior will be stopped at the location of the
breakpoint, otherwise the inferior will continue.
<p>If there are multiple breakpoints at the same location with a
<code>stop</code> method, each one will be called regardless of the
return status of the previous. This ensures that all <code>stop</code>
methods have a chance to execute at that location. In this scenario
if one of the methods returns <code>True</code> but the others return
<code>False</code>, the inferior will still be stopped.
<p>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 <span class="sc">gdb</span> or the inferior
at this time.
<p>Example <code>stop</code> implementation:
<pre class="smallexample"> class MyBreakpoint (gdb.Breakpoint):
def stop (self):
inf_val = gdb.parse_and_eval("foo")
if inf_val == 3:
return True
return False
</pre>
</blockquote></div>
<div class="defun">
&mdash; Function: <b>Breakpoint.is_valid</b> ()<var><a name="index-Breakpoint_002eis_005fvalid-2405"></a></var><br>
<blockquote><p>Return <code>True</code> if this <code>Breakpoint</code> object is valid,
<code>False</code> otherwise. A <code>Breakpoint</code> 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.
</p></blockquote></div>
<div class="defun">
&mdash; Function: <b>Breakpoint.delete</b> ()<var><a name="index-Breakpoint_002edelete-2406"></a></var><br>
<blockquote><p>Permanently deletes the <span class="sc">gdb</span> breakpoint. This also
invalidates the Python <code>Breakpoint</code> object. Any further access
to this object's attributes or methods will raise an error.
</p></blockquote></div>
<div class="defun">
&mdash; Variable: <b>Breakpoint.enabled</b><var><a name="index-Breakpoint_002eenabled-2407"></a></var><br>
<blockquote><p>This attribute is <code>True</code> if the breakpoint is enabled, and
<code>False</code> otherwise. This attribute is writable. You can use it to enable
or disable the breakpoint.
</p></blockquote></div>
<div class="defun">
&mdash; Variable: <b>Breakpoint.silent</b><var><a name="index-Breakpoint_002esilent-2408"></a></var><br>
<blockquote><p>This attribute is <code>True</code> if the breakpoint is silent, and
<code>False</code> otherwise. This attribute is writable.
<p>Note that a breakpoint can also be silent if it has commands and the
first command is <code>silent</code>. This is not reported by the
<code>silent</code> attribute.
</p></blockquote></div>
<div class="defun">
&mdash; Variable: <b>Breakpoint.pending</b><var><a name="index-Breakpoint_002epending-2409"></a></var><br>
<blockquote><p>This attribute is <code>True</code> if the breakpoint is pending, and
<code>False</code> otherwise. See <a href="Set-Breaks.html#Set-Breaks">Set Breaks</a>. This attribute is
read-only.
</p></blockquote></div>
<p><a name="python_005fbreakpoint_005fthread"></a>
<div class="defun">
&mdash; Variable: <b>Breakpoint.thread</b><var><a name="index-Breakpoint_002ethread-2410"></a></var><br>
<blockquote><p>If the breakpoint is thread-specific, this attribute holds the
thread's global id. If the breakpoint is not thread-specific, this
attribute is <code>None</code>. This attribute is writable.
</p></blockquote></div>
<div class="defun">
&mdash; Variable: <b>Breakpoint.task</b><var><a name="index-Breakpoint_002etask-2411"></a></var><br>
<blockquote><p>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 <code>None</code>. This attribute
is writable.
</p></blockquote></div>
<div class="defun">
&mdash; Variable: <b>Breakpoint.ignore_count</b><var><a name="index-Breakpoint_002eignore_005fcount-2412"></a></var><br>
<blockquote><p>This attribute holds the ignore count for the breakpoint, an integer.
This attribute is writable.
</p></blockquote></div>
<div class="defun">
&mdash; Variable: <b>Breakpoint.number</b><var><a name="index-Breakpoint_002enumber-2413"></a></var><br>
<blockquote><p>This attribute holds the breakpoint's number &mdash; the identifier used by
the user to manipulate the breakpoint. This attribute is not writable.
</p></blockquote></div>
<div class="defun">
&mdash; Variable: <b>Breakpoint.type</b><var><a name="index-Breakpoint_002etype-2414"></a></var><br>
<blockquote><p>This attribute holds the breakpoint's type &mdash; the identifier used to
determine the actual breakpoint type or use-case. This attribute is not
writable.
</p></blockquote></div>
<div class="defun">
&mdash; Variable: <b>Breakpoint.visible</b><var><a name="index-Breakpoint_002evisible-2415"></a></var><br>
<blockquote><p>This attribute tells whether the breakpoint is visible to the user
when set, or when the &lsquo;<samp><span class="samp">info breakpoints</span></samp>&rsquo; command is run. This
attribute is not writable.
</p></blockquote></div>
<div class="defun">
&mdash; Variable: <b>Breakpoint.temporary</b><var><a name="index-Breakpoint_002etemporary-2416"></a></var><br>
<blockquote><p>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 <code>is_valid</code>
function, will result in an error after the breakpoint has been hit
(as it has been automatically deleted). This attribute is not
writable.
</p></blockquote></div>
<div class="defun">
&mdash; Variable: <b>Breakpoint.hit_count</b><var><a name="index-Breakpoint_002ehit_005fcount-2417"></a></var><br>
<blockquote><p>This attribute holds the hit count for the breakpoint, an integer.
This attribute is writable, but currently it can only be set to zero.
</p></blockquote></div>
<div class="defun">
&mdash; Variable: <b>Breakpoint.location</b><var><a name="index-Breakpoint_002elocation-2418"></a></var><br>
<blockquote><p>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 <code>None</code>. This
attribute is not writable.
</p></blockquote></div>
<div class="defun">
&mdash; Variable: <b>Breakpoint.expression</b><var><a name="index-Breakpoint_002eexpression-2419"></a></var><br>
<blockquote><p>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 <code>None</code>. This attribute is not writable.
</p></blockquote></div>
<div class="defun">
&mdash; Variable: <b>Breakpoint.condition</b><var><a name="index-Breakpoint_002econdition-2420"></a></var><br>
<blockquote><p>This attribute holds the condition of the breakpoint, as specified by
the user. It is a string. If there is no condition, this attribute's
value is <code>None</code>. This attribute is writable.
</p></blockquote></div>
<div class="defun">
&mdash; Variable: <b>Breakpoint.commands</b><var><a name="index-Breakpoint_002ecommands-2421"></a></var><br>
<blockquote><p>This attribute holds the commands attached to the breakpoint. If
there are commands, this attribute's value is a string holding all the
commands, separated by newlines. If there are no commands, this
attribute is <code>None</code>. This attribute is writable.
</p></blockquote></div>
</body></html>