parthtamu/rag-code-assistant
0
1<!DOCTYPE html>2 3<html lang="en" data-content_root="../">4 <head>5 <meta charset="utf-8" />6 <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />7<meta property="og:title" content="bdb — Debugger framework" />8<meta property="og:type" content="website" />9<meta property="og:url" content="https://docs.python.org/3/library/bdb.html" />10<meta property="og:site_name" content="Python documentation" />11<meta property="og:description" content="Source code: Lib/bdb.py The bdb module handles basic debugger functions, like setting breakpoints or managing execution via the debugger. The following exception is defined: The bdb module also def..." />12<meta property="og:image:width" content="1146" />13<meta property="og:image:height" content="600" />14<meta property="og:image" content="https://docs.python.org/3.15/_images/social_previews/summary_library_bdb_5dfec8c0.png" />15<meta property="og:image:alt" content="Source code: Lib/bdb.py The bdb module handles basic debugger functions, like setting breakpoints or managing execution via the debugger. The following exception is defined: The bdb module also def..." />16<meta name="description" content="Source code: Lib/bdb.py The bdb module handles basic debugger functions, like setting breakpoints or managing execution via the debugger. The following exception is defined: The bdb module also def..." />17<meta name="twitter:card" content="summary_large_image" />18<meta name="theme-color" content="#3776ab">19 20 <title>bdb — Debugger framework — Python 3.15.0a6 documentation</title><meta name="viewport" content="width=device-width, initial-scale=1.0">21 22 <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" />23 <link rel="stylesheet" type="text/css" href="../_static/classic.css?v=234b1a7c" />24 <link rel="stylesheet" type="text/css" href="../_static/pydoctheme.css?v=89a2f22a" />25 <link rel="stylesheet" type="text/css" href="../_static/profiling-sampling-visualization.css?v=0c2600ae" />26 <link id="pygments_dark_css" media="(prefers-color-scheme: dark)" rel="stylesheet" type="text/css" href="../_static/pygments_dark.css?v=5349f25f" />27 28 <script src="../_static/documentation_options.js?v=6b7c9ff5"></script>29 <script src="../_static/doctools.js?v=9bcbadda"></script>30 <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>31 <script src="../_static/profiling-sampling-visualization.js?v=9811ed04"></script>32 33 <script src="../_static/sidebar.js"></script>34 35 <link rel="search" type="application/opensearchdescription+xml"36 title="Search within Python 3.15.0a6 documentation"37 href="../_static/opensearch.xml"/>38 <link rel="author" title="About these documents" href="../about.html" />39 <link rel="index" title="Index" href="../genindex.html" />40 <link rel="search" title="Search" href="../search.html" />41 <link rel="copyright" title="Copyright" href="../copyright.html" />42 <link rel="next" title="faulthandler — Dump the Python traceback" href="faulthandler.html" />43 <link rel="prev" title="Audit events table" href="audit_events.html" />44 45 46 <script defer file-types="bz2,epub,zip" data-domain="docs.python.org" src="https://analytics.python.org/js/script.file-downloads.outbound-links.js"></script>47 48 <link rel="canonical" href="https://docs.python.org/3/library/bdb.html">49 50 51 52 53 <style>54 @media only screen {55 table.full-width-table {56 width: 100%;57 }58 }59 </style>60<link rel="stylesheet" href="../_static/pydoctheme_dark.css" media="(prefers-color-scheme: dark)" id="pydoctheme_dark_css">61 <link rel="shortcut icon" type="image/png" href="../_static/py.svg">62 <script type="text/javascript" src="../_static/copybutton.js"></script>63 <script type="text/javascript" src="../_static/menu.js"></script>64 <script type="text/javascript" src="../_static/search-focus.js"></script>65 <script type="text/javascript" src="../_static/themetoggle.js"></script> 66 <script type="text/javascript" src="../_static/rtd_switcher.js"></script>67 <meta name="readthedocs-addons-api-version" content="1">68 69 </head>70<body>71<div class="mobile-nav">72 <input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"73 aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu">74 <nav class="nav-content" role="navigation">75 <label for="menuToggler" class="toggler__label">76 <span></span>77 </label>78 <span class="nav-items-wrapper">79 <a href="https://www.python.org/" class="nav-logo">80 <img src="../_static/py.svg" alt="Python logo">81 </a>82 <span class="version_switcher_placeholder"></span>83 <form role="search" class="search" action="../search.html" method="get">84 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">85 <path fill-rule="nonzero" fill="currentColor" d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path>86 </svg>87 <input placeholder="Quick search" aria-label="Quick search" type="search" name="q">88 <input type="submit" value="Go">89 </form>90 </span>91 </nav>92 <div class="menu-wrapper">93 <nav class="menu" role="navigation" aria-label="main navigation">94 <div class="language_switcher_placeholder"></div>95 96<label class="theme-selector-label">97 Theme98 <select class="theme-selector" oninput="activateTheme(this.value)">99 <option value="auto" selected>Auto</option>100 <option value="light">Light</option>101 <option value="dark">Dark</option>102 </select>103</label>104 <div>105 <h4>Previous topic</h4>106 <p class="topless"><a href="audit_events.html"107 title="previous chapter">Audit events table</a></p>108 </div>109 <div>110 <h4>Next topic</h4>111 <p class="topless"><a href="faulthandler.html"112 title="next chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">faulthandler</span></code> — Dump the Python traceback</a></p>113 </div>114 <script>115 document.addEventListener('DOMContentLoaded', () => {116 const title = document.querySelector('meta[property="og:title"]').content;117 const elements = document.querySelectorAll('.improvepage');118 const pageurl = window.location.href.split('?')[0];119 elements.forEach(element => {120 const url = new URL(element.href.split('?')[0].replace("-nojs", ""));121 url.searchParams.set('pagetitle', title);122 url.searchParams.set('pageurl', pageurl);123 url.searchParams.set('pagesource', "library/bdb.rst");124 element.href = url.toString();125 });126 });127 </script>128 <div role="note" aria-label="source link">129 <h3>This page</h3>130 <ul class="this-page-menu">131 <li><a href="../bugs.html">Report a bug</a></li>132 <li><a class="improvepage" href="../improve-page-nojs.html">Improve this page</a></li>133 <li>134 <a href="https://github.com/python/cpython/blob/main/Doc/library/bdb.rst?plain=1"135 rel="nofollow">Show source136 </a>137 </li>138 139 </ul>140 </div>141 </nav>142 </div>143</div>144 145 146 <div class="related" role="navigation" aria-label="Related">147 <h3>Navigation</h3>148 <ul>149 <li class="right" style="margin-right: 10px">150 <a href="../genindex.html" title="General Index"151 accesskey="I">index</a></li>152 <li class="right" >153 <a href="../py-modindex.html" title="Python Module Index"154 >modules</a> |</li>155 <li class="right" >156 <a href="faulthandler.html" title="faulthandler — Dump the Python traceback"157 accesskey="N">next</a> |</li>158 <li class="right" >159 <a href="audit_events.html" title="Audit events table"160 accesskey="P">previous</a> |</li>161 162 <li><img src="../_static/py.svg" alt="Python logo" style="vertical-align: middle; margin-top: -1px"></li>163 <li><a href="https://www.python.org/">Python</a> »</li>164 <li class="switchers">165 <div class="language_switcher_placeholder"></div>166 <div class="version_switcher_placeholder"></div>167 </li>168 <li>169 170 </li>171 <li id="cpython-language-and-version">172 <a href="../index.html">3.15.0a6 Documentation</a> »173 </li>174 175 <li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>176 <li class="nav-item nav-item-2"><a href="debug.html" accesskey="U">Debugging and profiling</a> »</li>177 <li class="nav-item nav-item-this"><a href=""><code class="xref py py-mod docutils literal notranslate"><span class="pre">bdb</span></code> — Debugger framework</a></li>178 <li class="right">179 180 181 <div class="inline-search" role="search">182 <form class="inline-search" action="../search.html" method="get">183 <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" id="search-box">184 <input type="submit" value="Go">185 </form>186 </div>187 |188 </li>189 <li class="right">190<label class="theme-selector-label">191 Theme192 <select class="theme-selector" oninput="activateTheme(this.value)">193 <option value="auto" selected>Auto</option>194 <option value="light">Light</option>195 <option value="dark">Dark</option>196 </select>197</label> |</li>198 199 </ul>200 </div> 201 202 <div class="document">203 <div class="documentwrapper">204 <div class="bodywrapper">205 <div class="body" role="main">206 207 <section id="module-bdb">208<span id="bdb-debugger-framework"></span><h1><code class="xref py py-mod docutils literal notranslate"><span class="pre">bdb</span></code> — Debugger framework<a class="headerlink" href="#module-bdb" title="Link to this heading">¶</a></h1>209<p><strong>Source code:</strong> <a class="extlink-source reference external" href="https://github.com/python/cpython/tree/main/Lib/bdb.py">Lib/bdb.py</a></p>210<hr class="docutils" />211<p>The <code class="xref py py-mod docutils literal notranslate"><span class="pre">bdb</span></code> module handles basic debugger functions, like setting breakpoints212or managing execution via the debugger.</p>213<p>The following exception is defined:</p>214<dl class="py exception">215<dt class="sig sig-object py" id="bdb.BdbQuit">216<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">bdb.</span></span><span class="sig-name descname"><span class="pre">BdbQuit</span></span><a class="headerlink" href="#bdb.BdbQuit" title="Link to this definition">¶</a></dt>217<dd><p>Exception raised by the <a class="reference internal" href="#bdb.Bdb" title="bdb.Bdb"><code class="xref py py-class docutils literal notranslate"><span class="pre">Bdb</span></code></a> class for quitting the debugger.</p>218</dd></dl>219 220<p>The <code class="xref py py-mod docutils literal notranslate"><span class="pre">bdb</span></code> module also defines two classes:</p>221<dl class="py class">222<dt class="sig sig-object py" id="bdb.Breakpoint">223<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">bdb.</span></span><span class="sig-name descname"><span class="pre">Breakpoint</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">file</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">line</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">temporary</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cond</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">funcname</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Breakpoint" title="Link to this definition">¶</a></dt>224<dd><p>This class implements temporary breakpoints, ignore counts, disabling and225(re-)enabling, and conditionals.</p>226<p>Breakpoints are indexed by number through a list called <a class="reference internal" href="#bdb.Breakpoint.bpbynumber" title="bdb.Breakpoint.bpbynumber"><code class="xref py py-attr docutils literal notranslate"><span class="pre">bpbynumber</span></code></a>227and by <code class="docutils literal notranslate"><span class="pre">(file,</span> <span class="pre">line)</span></code> pairs through <a class="reference internal" href="#bdb.Breakpoint.bplist" title="bdb.Breakpoint.bplist"><code class="xref py py-attr docutils literal notranslate"><span class="pre">bplist</span></code></a>. The former points to228a single instance of class <code class="xref py py-class docutils literal notranslate"><span class="pre">Breakpoint</span></code>. The latter points to a list229of such instances since there may be more than one breakpoint per line.</p>230<p>When creating a breakpoint, its associated <a class="reference internal" href="#bdb.Breakpoint.file" title="bdb.Breakpoint.file"><code class="xref py py-attr docutils literal notranslate"><span class="pre">file</span> <span class="pre">name</span></code></a> should231be in canonical form. If a <a class="reference internal" href="#bdb.Breakpoint.funcname" title="bdb.Breakpoint.funcname"><code class="xref py py-attr docutils literal notranslate"><span class="pre">funcname</span></code></a> is defined, a breakpoint232<a class="reference internal" href="#bdb.Breakpoint.hits" title="bdb.Breakpoint.hits"><code class="xref py py-attr docutils literal notranslate"><span class="pre">hit</span></code></a> will be counted when the first line of that function is233executed. A <a class="reference internal" href="#bdb.Breakpoint.cond" title="bdb.Breakpoint.cond"><code class="xref py py-attr docutils literal notranslate"><span class="pre">conditional</span></code></a> breakpoint always counts a234<code class="xref py py-attr docutils literal notranslate"><span class="pre">hit</span></code>.</p>235<p><code class="xref py py-class docutils literal notranslate"><span class="pre">Breakpoint</span></code> instances have the following methods:</p>236<dl class="py method">237<dt class="sig sig-object py" id="bdb.Breakpoint.deleteMe">238<span class="sig-name descname"><span class="pre">deleteMe</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Breakpoint.deleteMe" title="Link to this definition">¶</a></dt>239<dd><p>Delete the breakpoint from the list associated to a file/line. If it is240the last breakpoint in that position, it also deletes the entry for the241file/line.</p>242</dd></dl>243 244<dl class="py method">245<dt class="sig sig-object py" id="bdb.Breakpoint.enable">246<span class="sig-name descname"><span class="pre">enable</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Breakpoint.enable" title="Link to this definition">¶</a></dt>247<dd><p>Mark the breakpoint as enabled.</p>248</dd></dl>249 250<dl class="py method">251<dt class="sig sig-object py" id="bdb.Breakpoint.disable">252<span class="sig-name descname"><span class="pre">disable</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Breakpoint.disable" title="Link to this definition">¶</a></dt>253<dd><p>Mark the breakpoint as disabled.</p>254</dd></dl>255 256<dl class="py method">257<dt class="sig sig-object py" id="bdb.Breakpoint.bpformat">258<span class="sig-name descname"><span class="pre">bpformat</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Breakpoint.bpformat" title="Link to this definition">¶</a></dt>259<dd><p>Return a string with all the information about the breakpoint, nicely260formatted:</p>261<ul class="simple">262<li><p>Breakpoint number.</p></li>263<li><p>Temporary status (del or keep).</p></li>264<li><p>File/line position.</p></li>265<li><p>Break condition.</p></li>266<li><p>Number of times to ignore.</p></li>267<li><p>Number of times hit.</p></li>268</ul>269<div class="versionadded">270<p><span class="versionmodified added">Added in version 3.2.</span></p>271</div>272</dd></dl>273 274<dl class="py method">275<dt class="sig sig-object py" id="bdb.Breakpoint.bpprint">276<span class="sig-name descname"><span class="pre">bpprint</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">out</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Breakpoint.bpprint" title="Link to this definition">¶</a></dt>277<dd><p>Print the output of <a class="reference internal" href="#bdb.Breakpoint.bpformat" title="bdb.Breakpoint.bpformat"><code class="xref py py-meth docutils literal notranslate"><span class="pre">bpformat()</span></code></a> to the file <em>out</em>, or if it is278<code class="docutils literal notranslate"><span class="pre">None</span></code>, to standard output.</p>279</dd></dl>280 281<p><code class="xref py py-class docutils literal notranslate"><span class="pre">Breakpoint</span></code> instances have the following attributes:</p>282<dl class="py attribute">283<dt class="sig sig-object py" id="bdb.Breakpoint.file">284<span class="sig-name descname"><span class="pre">file</span></span><a class="headerlink" href="#bdb.Breakpoint.file" title="Link to this definition">¶</a></dt>285<dd><p>File name of the <code class="xref py py-class docutils literal notranslate"><span class="pre">Breakpoint</span></code>.</p>286</dd></dl>287 288<dl class="py attribute">289<dt class="sig sig-object py" id="bdb.Breakpoint.line">290<span class="sig-name descname"><span class="pre">line</span></span><a class="headerlink" href="#bdb.Breakpoint.line" title="Link to this definition">¶</a></dt>291<dd><p>Line number of the <code class="xref py py-class docutils literal notranslate"><span class="pre">Breakpoint</span></code> within <a class="reference internal" href="#bdb.Breakpoint.file" title="bdb.Breakpoint.file"><code class="xref py py-attr docutils literal notranslate"><span class="pre">file</span></code></a>.</p>292</dd></dl>293 294<dl class="py attribute">295<dt class="sig sig-object py" id="bdb.Breakpoint.temporary">296<span class="sig-name descname"><span class="pre">temporary</span></span><a class="headerlink" href="#bdb.Breakpoint.temporary" title="Link to this definition">¶</a></dt>297<dd><p><code class="docutils literal notranslate"><span class="pre">True</span></code> if a <code class="xref py py-class docutils literal notranslate"><span class="pre">Breakpoint</span></code> at (file, line) is temporary.</p>298</dd></dl>299 300<dl class="py attribute">301<dt class="sig sig-object py" id="bdb.Breakpoint.cond">302<span class="sig-name descname"><span class="pre">cond</span></span><a class="headerlink" href="#bdb.Breakpoint.cond" title="Link to this definition">¶</a></dt>303<dd><p>Condition for evaluating a <code class="xref py py-class docutils literal notranslate"><span class="pre">Breakpoint</span></code> at (file, line).</p>304</dd></dl>305 306<dl class="py attribute">307<dt class="sig sig-object py" id="bdb.Breakpoint.funcname">308<span class="sig-name descname"><span class="pre">funcname</span></span><a class="headerlink" href="#bdb.Breakpoint.funcname" title="Link to this definition">¶</a></dt>309<dd><p>Function name that defines whether a <code class="xref py py-class docutils literal notranslate"><span class="pre">Breakpoint</span></code> is hit upon310entering the function.</p>311</dd></dl>312 313<dl class="py attribute">314<dt class="sig sig-object py" id="bdb.Breakpoint.enabled">315<span class="sig-name descname"><span class="pre">enabled</span></span><a class="headerlink" href="#bdb.Breakpoint.enabled" title="Link to this definition">¶</a></dt>316<dd><p><code class="docutils literal notranslate"><span class="pre">True</span></code> if <code class="xref py py-class docutils literal notranslate"><span class="pre">Breakpoint</span></code> is enabled.</p>317</dd></dl>318 319<dl class="py attribute">320<dt class="sig sig-object py" id="bdb.Breakpoint.bpbynumber">321<span class="sig-name descname"><span class="pre">bpbynumber</span></span><a class="headerlink" href="#bdb.Breakpoint.bpbynumber" title="Link to this definition">¶</a></dt>322<dd><p>Numeric index for a single instance of a <code class="xref py py-class docutils literal notranslate"><span class="pre">Breakpoint</span></code>.</p>323</dd></dl>324 325<dl class="py attribute">326<dt class="sig sig-object py" id="bdb.Breakpoint.bplist">327<span class="sig-name descname"><span class="pre">bplist</span></span><a class="headerlink" href="#bdb.Breakpoint.bplist" title="Link to this definition">¶</a></dt>328<dd><p>Dictionary of <code class="xref py py-class docutils literal notranslate"><span class="pre">Breakpoint</span></code> instances indexed by329(<a class="reference internal" href="#bdb.Breakpoint.file" title="bdb.Breakpoint.file"><code class="xref py py-attr docutils literal notranslate"><span class="pre">file</span></code></a>, <a class="reference internal" href="#bdb.Breakpoint.line" title="bdb.Breakpoint.line"><code class="xref py py-attr docutils literal notranslate"><span class="pre">line</span></code></a>) tuples.</p>330</dd></dl>331 332<dl class="py attribute">333<dt class="sig sig-object py" id="bdb.Breakpoint.ignore">334<span class="sig-name descname"><span class="pre">ignore</span></span><a class="headerlink" href="#bdb.Breakpoint.ignore" title="Link to this definition">¶</a></dt>335<dd><p>Number of times to ignore a <code class="xref py py-class docutils literal notranslate"><span class="pre">Breakpoint</span></code>.</p>336</dd></dl>337 338<dl class="py attribute">339<dt class="sig sig-object py" id="bdb.Breakpoint.hits">340<span class="sig-name descname"><span class="pre">hits</span></span><a class="headerlink" href="#bdb.Breakpoint.hits" title="Link to this definition">¶</a></dt>341<dd><p>Count of the number of times a <code class="xref py py-class docutils literal notranslate"><span class="pre">Breakpoint</span></code> has been hit.</p>342</dd></dl>343 344</dd></dl>345 346<dl class="py class">347<dt class="sig sig-object py" id="bdb.Bdb">348<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">bdb.</span></span><span class="sig-name descname"><span class="pre">Bdb</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">skip</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">backend</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'settrace'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb" title="Link to this definition">¶</a></dt>349<dd><p>The <code class="xref py py-class docutils literal notranslate"><span class="pre">Bdb</span></code> class acts as a generic Python debugger base class.</p>350<p>This class takes care of the details of the trace facility; a derived class351should implement user interaction. The standard debugger class352(<a class="reference internal" href="pdb.html#pdb.Pdb" title="pdb.Pdb"><code class="xref py py-class docutils literal notranslate"><span class="pre">pdb.Pdb</span></code></a>) is an example.</p>353<p>The <em>skip</em> argument, if given, must be an iterable of glob-style354module name patterns. The debugger will not step into frames that355originate in a module that matches one of these patterns. Whether a356frame is considered to originate in a certain module is determined357by the <code class="docutils literal notranslate"><span class="pre">__name__</span></code> in the frame globals.</p>358<p>The <em>backend</em> argument specifies the backend to use for <code class="xref py py-class docutils literal notranslate"><span class="pre">Bdb</span></code>. It359can be either <code class="docutils literal notranslate"><span class="pre">'settrace'</span></code> or <code class="docutils literal notranslate"><span class="pre">'monitoring'</span></code>. <code class="docutils literal notranslate"><span class="pre">'settrace'</span></code> uses360<a class="reference internal" href="sys.html#sys.settrace" title="sys.settrace"><code class="xref py py-func docutils literal notranslate"><span class="pre">sys.settrace()</span></code></a> which has the best backward compatibility. The361<code class="docutils literal notranslate"><span class="pre">'monitoring'</span></code> backend uses the new <a class="reference internal" href="sys.monitoring.html#module-sys.monitoring" title="sys.monitoring: Access and control event monitoring"><code class="xref py py-mod docutils literal notranslate"><span class="pre">sys.monitoring</span></code></a> that was362introduced in Python 3.12, which can be much more efficient because it363can disable unused events. We are trying to keep the exact interfaces364for both backends, but there are some differences. The debugger developers365are encouraged to use the <code class="docutils literal notranslate"><span class="pre">'monitoring'</span></code> backend to achieve better366performance.</p>367<div class="versionchanged">368<p><span class="versionmodified changed">Changed in version 3.1: </span>Added the <em>skip</em> parameter.</p>369</div>370<div class="versionchanged">371<p><span class="versionmodified changed">Changed in version 3.14: </span>Added the <em>backend</em> parameter.</p>372</div>373<p>The following methods of <code class="xref py py-class docutils literal notranslate"><span class="pre">Bdb</span></code> normally don’t need to be overridden.</p>374<dl class="py method">375<dt class="sig sig-object py" id="bdb.Bdb.canonic">376<span class="sig-name descname"><span class="pre">canonic</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.canonic" title="Link to this definition">¶</a></dt>377<dd><p>Return canonical form of <em>filename</em>.</p>378<p>For real file names, the canonical form is an operating-system-dependent,379<a class="reference internal" href="os.path.html#os.path.normcase" title="os.path.normcase"><code class="xref py py-func docutils literal notranslate"><span class="pre">case-normalized</span></code></a> <a class="reference internal" href="os.path.html#os.path.abspath" title="os.path.abspath"><code class="xref py py-func docutils literal notranslate"><span class="pre">absolute</span> <span class="pre">path</span></code></a>. A <em>filename</em> with angle brackets, such as <code class="docutils literal notranslate"><span class="pre">"<stdin>"</span></code>380generated in interactive mode, is returned unchanged.</p>381</dd></dl>382 383<dl class="py method">384<dt class="sig sig-object py" id="bdb.Bdb.start_trace">385<span class="sig-name descname"><span class="pre">start_trace</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.start_trace" title="Link to this definition">¶</a></dt>386<dd><p>Start tracing. For <code class="docutils literal notranslate"><span class="pre">'settrace'</span></code> backend, this method is equivalent to387<code class="docutils literal notranslate"><span class="pre">sys.settrace(self.trace_dispatch)</span></code></p>388<div class="versionadded">389<p><span class="versionmodified added">Added in version 3.14.</span></p>390</div>391</dd></dl>392 393<dl class="py method">394<dt class="sig sig-object py" id="bdb.Bdb.stop_trace">395<span class="sig-name descname"><span class="pre">stop_trace</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.stop_trace" title="Link to this definition">¶</a></dt>396<dd><p>Stop tracing. For <code class="docutils literal notranslate"><span class="pre">'settrace'</span></code> backend, this method is equivalent to397<code class="docutils literal notranslate"><span class="pre">sys.settrace(None)</span></code></p>398<div class="versionadded">399<p><span class="versionmodified added">Added in version 3.14.</span></p>400</div>401</dd></dl>402 403<dl class="py method">404<dt class="sig sig-object py" id="bdb.Bdb.reset">405<span class="sig-name descname"><span class="pre">reset</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.reset" title="Link to this definition">¶</a></dt>406<dd><p>Set the <code class="xref py py-attr docutils literal notranslate"><span class="pre">botframe</span></code>, <code class="xref py py-attr docutils literal notranslate"><span class="pre">stopframe</span></code>, <code class="xref py py-attr docutils literal notranslate"><span class="pre">returnframe</span></code> and407<a class="reference internal" href="#bdb.Bdb.set_quit" title="bdb.Bdb.set_quit"><code class="xref py py-attr docutils literal notranslate"><span class="pre">quitting</span></code></a> attributes with values ready to start debugging.</p>408</dd></dl>409 410<dl class="py method">411<dt class="sig sig-object py" id="bdb.Bdb.trace_dispatch">412<span class="sig-name descname"><span class="pre">trace_dispatch</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">frame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">event</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">arg</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.trace_dispatch" title="Link to this definition">¶</a></dt>413<dd><p>This function is installed as the trace function of debugged frames. Its414return value is the new trace function (in most cases, that is, itself).</p>415<p>The default implementation decides how to dispatch a frame, depending on416the type of event (passed as a string) that is about to be executed.417<em>event</em> can be one of the following:</p>418<ul class="simple">419<li><p><code class="docutils literal notranslate"><span class="pre">"line"</span></code>: A new line of code is going to be executed.</p></li>420<li><p><code class="docutils literal notranslate"><span class="pre">"call"</span></code>: A function is about to be called, or another code block421entered.</p></li>422<li><p><code class="docutils literal notranslate"><span class="pre">"return"</span></code>: A function or other code block is about to return.</p></li>423<li><p><code class="docutils literal notranslate"><span class="pre">"exception"</span></code>: An exception has occurred.</p></li>424</ul>425<p>For all the events, specialized functions (see below) are called.</p>426<p>The <em>arg</em> parameter depends on the previous event.</p>427<p>See the documentation for <a class="reference internal" href="sys.html#sys.settrace" title="sys.settrace"><code class="xref py py-func docutils literal notranslate"><span class="pre">sys.settrace()</span></code></a> for more information on the428trace function. For more information on code and frame objects, refer to429<a class="reference internal" href="../reference/datamodel.html#types"><span class="std std-ref">The standard type hierarchy</span></a>.</p>430</dd></dl>431 432<dl class="py method">433<dt class="sig sig-object py" id="bdb.Bdb.dispatch_line">434<span class="sig-name descname"><span class="pre">dispatch_line</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">frame</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.dispatch_line" title="Link to this definition">¶</a></dt>435<dd><p>If the debugger should stop on the current line, invoke the436<a class="reference internal" href="#bdb.Bdb.user_line" title="bdb.Bdb.user_line"><code class="xref py py-meth docutils literal notranslate"><span class="pre">user_line()</span></code></a> method (which should be overridden in subclasses).437Raise a <a class="reference internal" href="#bdb.BdbQuit" title="bdb.BdbQuit"><code class="xref py py-exc docutils literal notranslate"><span class="pre">BdbQuit</span></code></a> exception if the <a class="reference internal" href="#bdb.Bdb.set_quit" title="bdb.Bdb.set_quit"><code class="xref py py-attr docutils literal notranslate"><span class="pre">quitting</span></code></a> flag is set438(which can be set from <code class="xref py py-meth docutils literal notranslate"><span class="pre">user_line()</span></code>). Return a reference to the439<a class="reference internal" href="#bdb.Bdb.trace_dispatch" title="bdb.Bdb.trace_dispatch"><code class="xref py py-meth docutils literal notranslate"><span class="pre">trace_dispatch()</span></code></a> method for further tracing in that scope.</p>440</dd></dl>441 442<dl class="py method">443<dt class="sig sig-object py" id="bdb.Bdb.dispatch_call">444<span class="sig-name descname"><span class="pre">dispatch_call</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">frame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">arg</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.dispatch_call" title="Link to this definition">¶</a></dt>445<dd><p>If the debugger should stop on this function call, invoke the446<a class="reference internal" href="#bdb.Bdb.user_call" title="bdb.Bdb.user_call"><code class="xref py py-meth docutils literal notranslate"><span class="pre">user_call()</span></code></a> method (which should be overridden in subclasses).447Raise a <a class="reference internal" href="#bdb.BdbQuit" title="bdb.BdbQuit"><code class="xref py py-exc docutils literal notranslate"><span class="pre">BdbQuit</span></code></a> exception if the <a class="reference internal" href="#bdb.Bdb.set_quit" title="bdb.Bdb.set_quit"><code class="xref py py-attr docutils literal notranslate"><span class="pre">quitting</span></code></a> flag is set448(which can be set from <code class="xref py py-meth docutils literal notranslate"><span class="pre">user_call()</span></code>). Return a reference to the449<a class="reference internal" href="#bdb.Bdb.trace_dispatch" title="bdb.Bdb.trace_dispatch"><code class="xref py py-meth docutils literal notranslate"><span class="pre">trace_dispatch()</span></code></a> method for further tracing in that scope.</p>450</dd></dl>451 452<dl class="py method">453<dt class="sig sig-object py" id="bdb.Bdb.dispatch_return">454<span class="sig-name descname"><span class="pre">dispatch_return</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">frame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">arg</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.dispatch_return" title="Link to this definition">¶</a></dt>455<dd><p>If the debugger should stop on this function return, invoke the456<a class="reference internal" href="#bdb.Bdb.user_return" title="bdb.Bdb.user_return"><code class="xref py py-meth docutils literal notranslate"><span class="pre">user_return()</span></code></a> method (which should be overridden in subclasses).457Raise a <a class="reference internal" href="#bdb.BdbQuit" title="bdb.BdbQuit"><code class="xref py py-exc docutils literal notranslate"><span class="pre">BdbQuit</span></code></a> exception if the <a class="reference internal" href="#bdb.Bdb.set_quit" title="bdb.Bdb.set_quit"><code class="xref py py-attr docutils literal notranslate"><span class="pre">quitting</span></code></a> flag is set458(which can be set from <code class="xref py py-meth docutils literal notranslate"><span class="pre">user_return()</span></code>). Return a reference to the459<a class="reference internal" href="#bdb.Bdb.trace_dispatch" title="bdb.Bdb.trace_dispatch"><code class="xref py py-meth docutils literal notranslate"><span class="pre">trace_dispatch()</span></code></a> method for further tracing in that scope.</p>460</dd></dl>461 462<dl class="py method">463<dt class="sig sig-object py" id="bdb.Bdb.dispatch_exception">464<span class="sig-name descname"><span class="pre">dispatch_exception</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">frame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">arg</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.dispatch_exception" title="Link to this definition">¶</a></dt>465<dd><p>If the debugger should stop at this exception, invokes the466<a class="reference internal" href="#bdb.Bdb.user_exception" title="bdb.Bdb.user_exception"><code class="xref py py-meth docutils literal notranslate"><span class="pre">user_exception()</span></code></a> method (which should be overridden in subclasses).467Raise a <a class="reference internal" href="#bdb.BdbQuit" title="bdb.BdbQuit"><code class="xref py py-exc docutils literal notranslate"><span class="pre">BdbQuit</span></code></a> exception if the <a class="reference internal" href="#bdb.Bdb.set_quit" title="bdb.Bdb.set_quit"><code class="xref py py-attr docutils literal notranslate"><span class="pre">quitting</span></code></a> flag is set468(which can be set from <code class="xref py py-meth docutils literal notranslate"><span class="pre">user_exception()</span></code>). Return a reference to the469<a class="reference internal" href="#bdb.Bdb.trace_dispatch" title="bdb.Bdb.trace_dispatch"><code class="xref py py-meth docutils literal notranslate"><span class="pre">trace_dispatch()</span></code></a> method for further tracing in that scope.</p>470</dd></dl>471 472<p>Normally derived classes don’t override the following methods, but they may473if they want to redefine the definition of stopping and breakpoints.</p>474<dl class="py method">475<dt class="sig sig-object py" id="bdb.Bdb.is_skipped_module">476<span class="sig-name descname"><span class="pre">is_skipped_module</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">module_name</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.is_skipped_module" title="Link to this definition">¶</a></dt>477<dd><p>Return <code class="docutils literal notranslate"><span class="pre">True</span></code> if <em>module_name</em> matches any skip pattern.</p>478</dd></dl>479 480<dl class="py method">481<dt class="sig sig-object py" id="bdb.Bdb.stop_here">482<span class="sig-name descname"><span class="pre">stop_here</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">frame</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.stop_here" title="Link to this definition">¶</a></dt>483<dd><p>Return <code class="docutils literal notranslate"><span class="pre">True</span></code> if <em>frame</em> is below the starting frame in the stack.</p>484</dd></dl>485 486<dl class="py method">487<dt class="sig sig-object py" id="bdb.Bdb.break_here">488<span class="sig-name descname"><span class="pre">break_here</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">frame</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.break_here" title="Link to this definition">¶</a></dt>489<dd><p>Return <code class="docutils literal notranslate"><span class="pre">True</span></code> if there is an effective breakpoint for this line.</p>490<p>Check whether a line or function breakpoint exists and is in effect. Delete temporary491breakpoints based on information from <a class="reference internal" href="#bdb.effective" title="bdb.effective"><code class="xref py py-func docutils literal notranslate"><span class="pre">effective()</span></code></a>.</p>492</dd></dl>493 494<dl class="py method">495<dt class="sig sig-object py" id="bdb.Bdb.break_anywhere">496<span class="sig-name descname"><span class="pre">break_anywhere</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">frame</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.break_anywhere" title="Link to this definition">¶</a></dt>497<dd><p>Return <code class="docutils literal notranslate"><span class="pre">True</span></code> if any breakpoint exists for <em>frame</em>’s filename.</p>498</dd></dl>499 500<p>Derived classes should override these methods to gain control over debugger501operation.</p>502<dl class="py method">503<dt class="sig sig-object py" id="bdb.Bdb.user_call">504<span class="sig-name descname"><span class="pre">user_call</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">frame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">argument_list</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.user_call" title="Link to this definition">¶</a></dt>505<dd><p>Called from <a class="reference internal" href="#bdb.Bdb.dispatch_call" title="bdb.Bdb.dispatch_call"><code class="xref py py-meth docutils literal notranslate"><span class="pre">dispatch_call()</span></code></a> if a break might stop inside the506called function.</p>507<p><em>argument_list</em> is not used anymore and will always be <code class="docutils literal notranslate"><span class="pre">None</span></code>.508The argument is kept for backwards compatibility.</p>509</dd></dl>510 511<dl class="py method">512<dt class="sig sig-object py" id="bdb.Bdb.user_line">513<span class="sig-name descname"><span class="pre">user_line</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">frame</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.user_line" title="Link to this definition">¶</a></dt>514<dd><p>Called from <a class="reference internal" href="#bdb.Bdb.dispatch_line" title="bdb.Bdb.dispatch_line"><code class="xref py py-meth docutils literal notranslate"><span class="pre">dispatch_line()</span></code></a> when either <a class="reference internal" href="#bdb.Bdb.stop_here" title="bdb.Bdb.stop_here"><code class="xref py py-meth docutils literal notranslate"><span class="pre">stop_here()</span></code></a> or515<a class="reference internal" href="#bdb.Bdb.break_here" title="bdb.Bdb.break_here"><code class="xref py py-meth docutils literal notranslate"><span class="pre">break_here()</span></code></a> returns <code class="docutils literal notranslate"><span class="pre">True</span></code>.</p>516</dd></dl>517 518<dl class="py method">519<dt class="sig sig-object py" id="bdb.Bdb.user_return">520<span class="sig-name descname"><span class="pre">user_return</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">frame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.user_return" title="Link to this definition">¶</a></dt>521<dd><p>Called from <a class="reference internal" href="#bdb.Bdb.dispatch_return" title="bdb.Bdb.dispatch_return"><code class="xref py py-meth docutils literal notranslate"><span class="pre">dispatch_return()</span></code></a> when <a class="reference internal" href="#bdb.Bdb.stop_here" title="bdb.Bdb.stop_here"><code class="xref py py-meth docutils literal notranslate"><span class="pre">stop_here()</span></code></a> returns <code class="docutils literal notranslate"><span class="pre">True</span></code>.</p>522</dd></dl>523 524<dl class="py method">525<dt class="sig sig-object py" id="bdb.Bdb.user_exception">526<span class="sig-name descname"><span class="pre">user_exception</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">frame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">exc_info</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.user_exception" title="Link to this definition">¶</a></dt>527<dd><p>Called from <a class="reference internal" href="#bdb.Bdb.dispatch_exception" title="bdb.Bdb.dispatch_exception"><code class="xref py py-meth docutils literal notranslate"><span class="pre">dispatch_exception()</span></code></a> when <a class="reference internal" href="#bdb.Bdb.stop_here" title="bdb.Bdb.stop_here"><code class="xref py py-meth docutils literal notranslate"><span class="pre">stop_here()</span></code></a>528returns <code class="docutils literal notranslate"><span class="pre">True</span></code>.</p>529</dd></dl>530 531<dl class="py method">532<dt class="sig sig-object py" id="bdb.Bdb.do_clear">533<span class="sig-name descname"><span class="pre">do_clear</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">arg</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.do_clear" title="Link to this definition">¶</a></dt>534<dd><p>Handle how a breakpoint must be removed when it is a temporary one.</p>535<p>This method must be implemented by derived classes.</p>536</dd></dl>537 538<p>Derived classes and clients can call the following methods to affect the539stepping state.</p>540<dl class="py method">541<dt class="sig sig-object py" id="bdb.Bdb.set_step">542<span class="sig-name descname"><span class="pre">set_step</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.set_step" title="Link to this definition">¶</a></dt>543<dd><p>Stop after one line of code.</p>544</dd></dl>545 546<dl class="py method">547<dt class="sig sig-object py" id="bdb.Bdb.set_next">548<span class="sig-name descname"><span class="pre">set_next</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">frame</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.set_next" title="Link to this definition">¶</a></dt>549<dd><p>Stop on the next line in or below the given frame.</p>550</dd></dl>551 552<dl class="py method">553<dt class="sig sig-object py" id="bdb.Bdb.set_return">554<span class="sig-name descname"><span class="pre">set_return</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">frame</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.set_return" title="Link to this definition">¶</a></dt>555<dd><p>Stop when returning from the given frame.</p>556</dd></dl>557 558<dl class="py method">559<dt class="sig sig-object py" id="bdb.Bdb.set_until">560<span class="sig-name descname"><span class="pre">set_until</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">frame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lineno</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.set_until" title="Link to this definition">¶</a></dt>561<dd><p>Stop when the line with the <em>lineno</em> greater than the current one is562reached or when returning from current frame.</p>563</dd></dl>564 565<dl class="py method">566<dt class="sig sig-object py" id="bdb.Bdb.set_trace">567<span class="sig-name descname"><span class="pre">set_trace</span></span><span class="sig-paren">(</span><span class="optional">[</span><em class="sig-param"><span class="n"><span class="pre">frame</span></span></em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.set_trace" title="Link to this definition">¶</a></dt>568<dd><p>Start debugging from <em>frame</em>. If <em>frame</em> is not specified, debugging569starts from caller’s frame.</p>570<div class="versionchanged">571<p><span class="versionmodified changed">Changed in version 3.13: </span><a class="reference internal" href="#bdb.set_trace" title="bdb.set_trace"><code class="xref py py-func docutils literal notranslate"><span class="pre">set_trace()</span></code></a> will enter the debugger immediately, rather than572on the next line of code to be executed.</p>573</div>574</dd></dl>575 576<dl class="py method">577<dt class="sig sig-object py" id="bdb.Bdb.set_continue">578<span class="sig-name descname"><span class="pre">set_continue</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.set_continue" title="Link to this definition">¶</a></dt>579<dd><p>Stop only at breakpoints or when finished. If there are no breakpoints,580set the system trace function to <code class="docutils literal notranslate"><span class="pre">None</span></code>.</p>581</dd></dl>582 583<dl class="py method">584<dt class="sig sig-object py" id="bdb.Bdb.set_quit">585<span class="sig-name descname"><span class="pre">set_quit</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.set_quit" title="Link to this definition">¶</a></dt>586<dd><p id="index-0">Set the <code class="xref py py-attr docutils literal notranslate"><span class="pre">quitting</span></code> attribute to <code class="docutils literal notranslate"><span class="pre">True</span></code>. This raises <a class="reference internal" href="#bdb.BdbQuit" title="bdb.BdbQuit"><code class="xref py py-exc docutils literal notranslate"><span class="pre">BdbQuit</span></code></a> in587the next call to one of the <code class="xref py py-meth docutils literal notranslate"><span class="pre">dispatch_*()</span></code> methods.</p>588</dd></dl>589 590<p>Derived classes and clients can call the following methods to manipulate591breakpoints. These methods return a string containing an error message if592something went wrong, or <code class="docutils literal notranslate"><span class="pre">None</span></code> if all is well.</p>593<dl class="py method">594<dt class="sig sig-object py" id="bdb.Bdb.set_break">595<span class="sig-name descname"><span class="pre">set_break</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lineno</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">temporary</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cond</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">funcname</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.set_break" title="Link to this definition">¶</a></dt>596<dd><p>Set a new breakpoint. If the <em>lineno</em> line doesn’t exist for the597<em>filename</em> passed as argument, return an error message. The <em>filename</em>598should be in canonical form, as described in the <a class="reference internal" href="#bdb.Bdb.canonic" title="bdb.Bdb.canonic"><code class="xref py py-meth docutils literal notranslate"><span class="pre">canonic()</span></code></a> method.</p>599</dd></dl>600 601<dl class="py method">602<dt class="sig sig-object py" id="bdb.Bdb.clear_break">603<span class="sig-name descname"><span class="pre">clear_break</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lineno</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.clear_break" title="Link to this definition">¶</a></dt>604<dd><p>Delete the breakpoints in <em>filename</em> and <em>lineno</em>. If none were set,605return an error message.</p>606</dd></dl>607 608<dl class="py method">609<dt class="sig sig-object py" id="bdb.Bdb.clear_bpbynumber">610<span class="sig-name descname"><span class="pre">clear_bpbynumber</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">arg</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.clear_bpbynumber" title="Link to this definition">¶</a></dt>611<dd><p>Delete the breakpoint which has the index <em>arg</em> in the612<a class="reference internal" href="#bdb.Breakpoint.bpbynumber" title="bdb.Breakpoint.bpbynumber"><code class="xref py py-attr docutils literal notranslate"><span class="pre">Breakpoint.bpbynumber</span></code></a>. If <em>arg</em> is not numeric or out of range,613return an error message.</p>614</dd></dl>615 616<dl class="py method">617<dt class="sig sig-object py" id="bdb.Bdb.clear_all_file_breaks">618<span class="sig-name descname"><span class="pre">clear_all_file_breaks</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.clear_all_file_breaks" title="Link to this definition">¶</a></dt>619<dd><p>Delete all breakpoints in <em>filename</em>. If none were set, return an error620message.</p>621</dd></dl>622 623<dl class="py method">624<dt class="sig sig-object py" id="bdb.Bdb.clear_all_breaks">625<span class="sig-name descname"><span class="pre">clear_all_breaks</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.clear_all_breaks" title="Link to this definition">¶</a></dt>626<dd><p>Delete all existing breakpoints. If none were set, return an error627message.</p>628</dd></dl>629 630<dl class="py method">631<dt class="sig sig-object py" id="bdb.Bdb.get_bpbynumber">632<span class="sig-name descname"><span class="pre">get_bpbynumber</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">arg</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.get_bpbynumber" title="Link to this definition">¶</a></dt>633<dd><p>Return a breakpoint specified by the given number. If <em>arg</em> is a string,634it will be converted to a number. If <em>arg</em> is a non-numeric string, if635the given breakpoint never existed or has been deleted, a636<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code></a> is raised.</p>637<div class="versionadded">638<p><span class="versionmodified added">Added in version 3.2.</span></p>639</div>640</dd></dl>641 642<dl class="py method">643<dt class="sig sig-object py" id="bdb.Bdb.get_break">644<span class="sig-name descname"><span class="pre">get_break</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lineno</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.get_break" title="Link to this definition">¶</a></dt>645<dd><p>Return <code class="docutils literal notranslate"><span class="pre">True</span></code> if there is a breakpoint for <em>lineno</em> in <em>filename</em>.</p>646</dd></dl>647 648<dl class="py method">649<dt class="sig sig-object py" id="bdb.Bdb.get_breaks">650<span class="sig-name descname"><span class="pre">get_breaks</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lineno</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.get_breaks" title="Link to this definition">¶</a></dt>651<dd><p>Return all breakpoints for <em>lineno</em> in <em>filename</em>, or an empty list if652none are set.</p>653</dd></dl>654 655<dl class="py method">656<dt class="sig sig-object py" id="bdb.Bdb.get_file_breaks">657<span class="sig-name descname"><span class="pre">get_file_breaks</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.get_file_breaks" title="Link to this definition">¶</a></dt>658<dd><p>Return all breakpoints in <em>filename</em>, or an empty list if none are set.</p>659</dd></dl>660 661<dl class="py method">662<dt class="sig sig-object py" id="bdb.Bdb.get_all_breaks">663<span class="sig-name descname"><span class="pre">get_all_breaks</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.get_all_breaks" title="Link to this definition">¶</a></dt>664<dd><p>Return all breakpoints that are set.</p>665</dd></dl>666 667<p>Derived classes and clients can call the following methods to disable and668restart events to achieve better performance. These methods only work669when using the <code class="docutils literal notranslate"><span class="pre">'monitoring'</span></code> backend.</p>670<dl class="py method">671<dt class="sig sig-object py" id="bdb.Bdb.disable_current_event">672<span class="sig-name descname"><span class="pre">disable_current_event</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.disable_current_event" title="Link to this definition">¶</a></dt>673<dd><p>Disable the current event until the next time <a class="reference internal" href="#bdb.Bdb.restart_events" title="bdb.Bdb.restart_events"><code class="xref py py-func docutils literal notranslate"><span class="pre">restart_events()</span></code></a> is674called. This is helpful when the debugger is not interested in the current675line.</p>676<div class="versionadded">677<p><span class="versionmodified added">Added in version 3.14.</span></p>678</div>679</dd></dl>680 681<dl class="py method">682<dt class="sig sig-object py" id="bdb.Bdb.restart_events">683<span class="sig-name descname"><span class="pre">restart_events</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.restart_events" title="Link to this definition">¶</a></dt>684<dd><p>Restart all the disabled events. This function is automatically called in685<code class="docutils literal notranslate"><span class="pre">dispatch_*</span></code> methods after <code class="docutils literal notranslate"><span class="pre">user_*</span></code> methods are called. If the686<code class="docutils literal notranslate"><span class="pre">dispatch_*</span></code> methods are not overridden, the disabled events will be687restarted after each user interaction.</p>688<div class="versionadded">689<p><span class="versionmodified added">Added in version 3.14.</span></p>690</div>691</dd></dl>692 693<p>Derived classes and clients can call the following methods to get a data694structure representing a stack trace.</p>695<dl class="py method">696<dt class="sig sig-object py" id="bdb.Bdb.get_stack">697<span class="sig-name descname"><span class="pre">get_stack</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">f</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">t</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.get_stack" title="Link to this definition">¶</a></dt>698<dd><p>Return a list of (frame, lineno) tuples in a stack trace, and a size.</p>699<p>The most recently called frame is last in the list. The size is the number700of frames below the frame where the debugger was invoked.</p>701</dd></dl>702 703<dl class="py method">704<dt class="sig sig-object py" id="bdb.Bdb.format_stack_entry">705<span class="sig-name descname"><span class="pre">format_stack_entry</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">frame_lineno</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lprefix</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">':</span> <span class="pre">'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.format_stack_entry" title="Link to this definition">¶</a></dt>706<dd><p>Return a string with information about a stack entry, which is a707<code class="docutils literal notranslate"><span class="pre">(frame,</span> <span class="pre">lineno)</span></code> tuple. The return string contains:</p>708<ul class="simple">709<li><p>The canonical filename which contains the frame.</p></li>710<li><p>The function name or <code class="docutils literal notranslate"><span class="pre">"<lambda>"</span></code>.</p></li>711<li><p>The input arguments.</p></li>712<li><p>The return value.</p></li>713<li><p>The line of code (if it exists).</p></li>714</ul>715</dd></dl>716 717<p>The following two methods can be called by clients to use a debugger to debug718a <a class="reference internal" href="../glossary.html#term-statement"><span class="xref std std-term">statement</span></a>, given as a string.</p>719<dl class="py method">720<dt class="sig sig-object py" id="bdb.Bdb.run">721<span class="sig-name descname"><span class="pre">run</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cmd</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">globals</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">locals</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.run" title="Link to this definition">¶</a></dt>722<dd><p>Debug a statement executed via the <a class="reference internal" href="functions.html#exec" title="exec"><code class="xref py py-func docutils literal notranslate"><span class="pre">exec()</span></code></a> function. <em>globals</em>723defaults to <code class="xref py py-attr docutils literal notranslate"><span class="pre">__main__.__dict__</span></code>, <em>locals</em> defaults to <em>globals</em>.</p>724</dd></dl>725 726<dl class="py method">727<dt class="sig sig-object py" id="bdb.Bdb.runeval">728<span class="sig-name descname"><span class="pre">runeval</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">expr</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">globals</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">locals</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.runeval" title="Link to this definition">¶</a></dt>729<dd><p>Debug an expression executed via the <a class="reference internal" href="functions.html#eval" title="eval"><code class="xref py py-func docutils literal notranslate"><span class="pre">eval()</span></code></a> function. <em>globals</em> and730<em>locals</em> have the same meaning as in <a class="reference internal" href="#bdb.Bdb.run" title="bdb.Bdb.run"><code class="xref py py-meth docutils literal notranslate"><span class="pre">run()</span></code></a>.</p>731</dd></dl>732 733<dl class="py method">734<dt class="sig sig-object py" id="bdb.Bdb.runctx">735<span class="sig-name descname"><span class="pre">runctx</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cmd</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">globals</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">locals</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.runctx" title="Link to this definition">¶</a></dt>736<dd><p>For backwards compatibility. Calls the <a class="reference internal" href="#bdb.Bdb.run" title="bdb.Bdb.run"><code class="xref py py-meth docutils literal notranslate"><span class="pre">run()</span></code></a> method.</p>737</dd></dl>738 739<dl class="py method">740<dt class="sig sig-object py" id="bdb.Bdb.runcall">741<span class="sig-name descname"><span class="pre">runcall</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em>, <em class="sig-param"><span class="positional-only-separator o"><abbr title="Positional-only parameter separator (PEP 570)"><span class="pre">/</span></abbr></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwds</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.runcall" title="Link to this definition">¶</a></dt>742<dd><p>Debug a single function call, and return its result.</p>743</dd></dl>744 745</dd></dl>746 747<p>Finally, the module defines the following functions:</p>748<dl class="py function">749<dt class="sig sig-object py" id="bdb.checkfuncname">750<span class="sig-prename descclassname"><span class="pre">bdb.</span></span><span class="sig-name descname"><span class="pre">checkfuncname</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">b</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frame</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.checkfuncname" title="Link to this definition">¶</a></dt>751<dd><p>Return <code class="docutils literal notranslate"><span class="pre">True</span></code> if we should break here, depending on the way the752<a class="reference internal" href="#bdb.Breakpoint" title="bdb.Breakpoint"><code class="xref py py-class docutils literal notranslate"><span class="pre">Breakpoint</span></code></a> <em>b</em> was set.</p>753<p>If it was set via line number, it checks if754<a class="reference internal" href="#bdb.Breakpoint.line" title="bdb.Breakpoint.line"><code class="xref py py-attr docutils literal notranslate"><span class="pre">b.line</span></code></a> is the same as the one in <em>frame</em>.755If the breakpoint was set via756<a class="reference internal" href="#bdb.Breakpoint.funcname" title="bdb.Breakpoint.funcname"><code class="xref py py-attr docutils literal notranslate"><span class="pre">function</span> <span class="pre">name</span></code></a>, we have to check we are in757the right <em>frame</em> (the right function) and if we are on its first executable758line.</p>759</dd></dl>760 761<dl class="py function">762<dt class="sig sig-object py" id="bdb.effective">763<span class="sig-prename descclassname"><span class="pre">bdb.</span></span><span class="sig-name descname"><span class="pre">effective</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">file</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">line</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frame</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.effective" title="Link to this definition">¶</a></dt>764<dd><p>Return <code class="docutils literal notranslate"><span class="pre">(active</span> <span class="pre">breakpoint,</span> <span class="pre">delete</span> <span class="pre">temporary</span> <span class="pre">flag)</span></code> or <code class="docutils literal notranslate"><span class="pre">(None,</span> <span class="pre">None)</span></code> as the765breakpoint to act upon.</p>766<p>The <em>active breakpoint</em> is the first entry in767<a class="reference internal" href="#bdb.Breakpoint.bplist" title="bdb.Breakpoint.bplist"><code class="xref py py-attr docutils literal notranslate"><span class="pre">bplist</span></code></a> for the768(<a class="reference internal" href="#bdb.Breakpoint.file" title="bdb.Breakpoint.file"><code class="xref py py-attr docutils literal notranslate"><span class="pre">file</span></code></a>, <a class="reference internal" href="#bdb.Breakpoint.line" title="bdb.Breakpoint.line"><code class="xref py py-attr docutils literal notranslate"><span class="pre">line</span></code></a>)769(which must exist) that is <a class="reference internal" href="#bdb.Breakpoint.enabled" title="bdb.Breakpoint.enabled"><code class="xref py py-attr docutils literal notranslate"><span class="pre">enabled</span></code></a>, for770which <a class="reference internal" href="#bdb.checkfuncname" title="bdb.checkfuncname"><code class="xref py py-func docutils literal notranslate"><span class="pre">checkfuncname()</span></code></a> is true, and that has neither a false771<a class="reference internal" href="#bdb.Breakpoint.cond" title="bdb.Breakpoint.cond"><code class="xref py py-attr docutils literal notranslate"><span class="pre">condition</span></code></a> nor positive772<a class="reference internal" href="#bdb.Breakpoint.ignore" title="bdb.Breakpoint.ignore"><code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore</span></code></a> count. The <em>flag</em>, meaning that a773temporary breakpoint should be deleted, is <code class="docutils literal notranslate"><span class="pre">False</span></code> only when the774<code class="xref py py-attr docutils literal notranslate"><span class="pre">cond</span></code> cannot be evaluated (in which case,775<code class="xref py py-attr docutils literal notranslate"><span class="pre">ignore</span></code> count is ignored).</p>776<p>If no such entry exists, then <code class="docutils literal notranslate"><span class="pre">(None,</span> <span class="pre">None)</span></code> is returned.</p>777</dd></dl>778 779<dl class="py function">780<dt class="sig sig-object py" id="bdb.set_trace">781<span class="sig-prename descclassname"><span class="pre">bdb.</span></span><span class="sig-name descname"><span class="pre">set_trace</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.set_trace" title="Link to this definition">¶</a></dt>782<dd><p>Start debugging with a <a class="reference internal" href="#bdb.Bdb" title="bdb.Bdb"><code class="xref py py-class docutils literal notranslate"><span class="pre">Bdb</span></code></a> instance from caller’s frame.</p>783</dd></dl>784 785</section>786 787 788 <div class="clearer"></div>789 </div>790 </div>791 </div>792 <div class="sphinxsidebar" role="navigation" aria-label="Main">793 <div class="sphinxsidebarwrapper">794 <div>795 <h4>Previous topic</h4>796 <p class="topless"><a href="audit_events.html"797 title="previous chapter">Audit events table</a></p>798 </div>799 <div>800 <h4>Next topic</h4>801 <p class="topless"><a href="faulthandler.html"802 title="next chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">faulthandler</span></code> — Dump the Python traceback</a></p>803 </div>804 <script>805 document.addEventListener('DOMContentLoaded', () => {806 const title = document.querySelector('meta[property="og:title"]').content;807 const elements = document.querySelectorAll('.improvepage');808 const pageurl = window.location.href.split('?')[0];809 elements.forEach(element => {810 const url = new URL(element.href.split('?')[0].replace("-nojs", ""));811 url.searchParams.set('pagetitle', title);812 url.searchParams.set('pageurl', pageurl);813 url.searchParams.set('pagesource', "library/bdb.rst");814 element.href = url.toString();815 });816 });817 </script>818 <div role="note" aria-label="source link">819 <h3>This page</h3>820 <ul class="this-page-menu">821 <li><a href="../bugs.html">Report a bug</a></li>822 <li><a class="improvepage" href="../improve-page-nojs.html">Improve this page</a></li>823 <li>824 <a href="https://github.com/python/cpython/blob/main/Doc/library/bdb.rst?plain=1"825 rel="nofollow">Show source826 </a>827 </li>828 829 </ul>830 </div>831 </div>832<div id="sidebarbutton" title="Collapse sidebar">833<span>«</span>834</div>835 836 </div>837 <div class="clearer"></div>838 </div> 839 <div class="related" role="navigation" aria-label="Related">840 <h3>Navigation</h3>841 <ul>842 <li class="right" style="margin-right: 10px">843 <a href="../genindex.html" title="General Index"844 >index</a></li>845 <li class="right" >846 <a href="../py-modindex.html" title="Python Module Index"847 >modules</a> |</li>848 <li class="right" >849 <a href="faulthandler.html" title="faulthandler — Dump the Python traceback"850 >next</a> |</li>851 <li class="right" >852 <a href="audit_events.html" title="Audit events table"853 >previous</a> |</li>854 855 <li><img src="../_static/py.svg" alt="Python logo" style="vertical-align: middle; margin-top: -1px"></li>856 <li><a href="https://www.python.org/">Python</a> »</li>857 <li class="switchers">858 <div class="language_switcher_placeholder"></div>859 <div class="version_switcher_placeholder"></div>860 </li>861 <li>862 863 </li>864 <li id="cpython-language-and-version">865 <a href="../index.html">3.15.0a6 Documentation</a> »866 </li>867 868 <li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>869 <li class="nav-item nav-item-2"><a href="debug.html" >Debugging and profiling</a> »</li>870 <li class="nav-item nav-item-this"><a href=""><code class="xref py py-mod docutils literal notranslate"><span class="pre">bdb</span></code> — Debugger framework</a></li>871 <li class="right">872 873 874 <div class="inline-search" role="search">875 <form class="inline-search" action="../search.html" method="get">876 <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" id="search-box">877 <input type="submit" value="Go">878 </form>879 </div>880 |881 </li>882 <li class="right">883<label class="theme-selector-label">884 Theme885 <select class="theme-selector" oninput="activateTheme(this.value)">886 <option value="auto" selected>Auto</option>887 <option value="light">Light</option>888 <option value="dark">Dark</option>889 </select>890</label> |</li>891 892 </ul>893 </div> 894 <div class="footer">895 © <a href="../copyright.html">Copyright</a> 2001 Python Software Foundation.896 <br>897 This page is licensed under the Python Software Foundation License Version 2.898 <br>899 Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.900 <br>901 902 See <a href="/license.html">History and License</a> for more information.<br>903 904 905 <br>906 907 The Python Software Foundation is a non-profit corporation.908<a href="https://www.python.org/psf/donations/">Please donate.</a>909<br>910 <br>911 Last updated on Mar 10, 2026 (08:58 UTC).912 913 <a href="/bugs.html">Found a bug</a>?914 915 <br>916 917 Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.918 </div>919 920 </body>921</html>