Files
hustoj/web/python-docs/library/bdb.html
2025-03-09 17:10:56 +08:00

605 lines
47 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh_CN">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>bdb --- 调试器框架 &#8212; Python 3.8.20 文档</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/language_data.js"></script>
<script src="../_static/translations.js"></script>
<script src="../_static/sidebar.js"></script>
<link rel="search" type="application/opensearchdescription+xml"
title="在 Python 3.8.20 文档 中搜索"
href="../_static/opensearch.xml"/>
<link rel="author" title="关于这些文档" href="../about.html" />
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="copyright" title="版权所有" href="../copyright.html" />
<link rel="next" title="faulthandler —— 转储 Python 的跟踪信息" href="faulthandler.html" />
<link rel="prev" title="审计事件表" href="audit_events.html" />
<link rel="canonical" href="https://docs.python.org/3/library/bdb.html" />
<style>
@media only screen {
table.full-width-table {
width: 100%;
}
}
</style>
<link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
<script type="text/javascript" src="../_static/copybutton.js"></script>
<script type="text/javascript" src="../_static/menu.js"></script>
</head>
<body>
<div class="mobile-nav">
<input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
<label for="menuToggler" class="toggler__label">
<span></span>
</label>
<nav class="nav-content" role="navigation">
<a href="https://www.python.org/" class="nav-logo">
<img src="../_static/py.svg" alt="Logo"/>
</a>
<div class="version_switcher_placeholder"></div>
<form role="search" class="search" action="../search.html" method="get">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
<path fill-rule="nonzero"
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" fill="#444"></path>
</svg>
<input type="text" name="q" aria-label="快速搜索"/>
<input type="submit" value="转向"/>
</form>
</nav>
<div class="menu-wrapper">
<nav class="menu" role="navigation" aria-label="main navigation">
<div class="language_switcher_placeholder"></div>
<h4>上一个主题</h4>
<p class="topless"><a href="audit_events.html"
title="上一章">审计事件表</a></p>
<h4>下一个主题</h4>
<p class="topless"><a href="faulthandler.html"
title="下一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">faulthandler</span></code> —— 转储 Python 的跟踪信息</a></p>
<div role="note" aria-label="source link">
<h3>本页</h3>
<ul class="this-page-menu">
<li><a href="../bugs.html">报告 Bug</a></li>
<li>
<a href="https://github.com/python/cpython/blob/3.8/Doc/library/bdb.rst"
rel="nofollow">显示源代码
</a>
</li>
</ul>
</div>
</nav>
</div>
</div>
<div id="outdated-warning" style="padding: .5em; text-align: center; background-color: #FFBABA; color: #6A0E0E;">
这个文档所针对的是一个已不再受支持的 Python 旧版本。
你应当升级版本,并阅读
<a href="/3/library/bdb.html"> Python 当前稳定版本的文档</a>.
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>导航</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="总目录"
accesskey="I">索引</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python 模块索引"
>模块</a> |</li>
<li class="right" >
<a href="faulthandler.html" title="faulthandler —— 转储 Python 的跟踪信息"
accesskey="N">下一页</a> |</li>
<li class="right" >
<a href="audit_events.html" title="审计事件表"
accesskey="P">上一页</a> |</li>
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> &#187;</li>
<li class="switchers">
<div class="language_switcher_placeholder"></div>
<div class="version_switcher_placeholder"></div>
</li>
<li>
</li>
<li id="cpython-language-and-version">
<a href="../index.html">3.8.20 Documentation</a> &#187;
</li>
<li class="nav-item nav-item-1"><a href="index.html" >Python 标准库</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="debug.html" accesskey="U">调试和分析</a> &#187;</li>
<li class="right">
<div class="inline-search" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
<input type="submit" value="转向" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
|
</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-bdb">
<span id="bdb-debugger-framework"></span><h1><a class="reference internal" href="#module-bdb" title="bdb: Debugger framework."><code class="xref py py-mod docutils literal notranslate"><span class="pre">bdb</span></code></a> --- 调试器框架<a class="headerlink" href="#module-bdb" title="永久链接至标题"></a></h1>
<p><strong>源代码:</strong> <a class="reference external" href="https://github.com/python/cpython/tree/3.8/Lib/bdb.py">Lib/bdb.py</a></p>
<hr class="docutils" />
<p><a class="reference internal" href="#module-bdb" title="bdb: Debugger framework."><code class="xref py py-mod docutils literal notranslate"><span class="pre">bdb</span></code></a> 模块处理基本的调试器函数,例如设置中断点或通过调试器来管理执行。</p>
<p>定义了以下异常:</p>
<dl class="exception">
<dt id="bdb.BdbQuit">
<em class="property">exception </em><code class="sig-prename descclassname">bdb.</code><code class="sig-name descname">BdbQuit</code><a class="headerlink" href="#bdb.BdbQuit" title="永久链接至目标"></a></dt>
<dd><p><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> 类引发用于退出调试器的异常。</p>
</dd></dl>
<p><a class="reference internal" href="#module-bdb" title="bdb: Debugger framework."><code class="xref py py-mod docutils literal notranslate"><span class="pre">bdb</span></code></a> 模块还定义了两个类:</p>
<dl class="class">
<dt id="bdb.Breakpoint">
<em class="property">class </em><code class="sig-prename descclassname">bdb.</code><code class="sig-name descname">Breakpoint</code><span class="sig-paren">(</span><em class="sig-param">self</em>, <em class="sig-param">file</em>, <em class="sig-param">line</em>, <em class="sig-param">temporary=0</em>, <em class="sig-param">cond=None</em>, <em class="sig-param">funcname=None</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Breakpoint" title="永久链接至目标"></a></dt>
<dd><p>这个类实现了临时性中断点、忽略计数、禁用与(重新)启用,以及条件设置等。</p>
<p>中断点通过一个名为 <code class="xref py py-attr docutils literal notranslate"><span class="pre">bpbynumber</span></code> 的列表基于数字并通过 <code class="xref py py-attr docutils literal notranslate"><span class="pre">bplist</span></code> 基于 <code class="docutils literal notranslate"><span class="pre">(file,</span> <span class="pre">line)</span></code> 对进行索引。 前者指向一个 <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> 类的单独实例。 后者指向一个由这种实例组成的列表,因为在每一行中可能存在多个中断点。</p>
<p>当创建一个中断点时,它所关联的文件名应当为规范的形式。 如果定义了 <em>funcname</em>,则当该函数的第一行被执行时将增加一次中断点命中计数。 带条件的中断点将总被增加一次计数。</p>
<p><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> 的实例具有下列方法:</p>
<dl class="method">
<dt id="bdb.Breakpoint.deleteMe">
<code class="sig-name descname">deleteMe</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Breakpoint.deleteMe" title="永久链接至目标"></a></dt>
<dd><p>从关联到文件/行的列表中删除此中断点。 如果它是该位置上的最后一个中断点,还将删除相应的文件/行条目。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Breakpoint.enable">
<code class="sig-name descname">enable</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Breakpoint.enable" title="永久链接至目标"></a></dt>
<dd><p>将此中断点标记为启用。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Breakpoint.disable">
<code class="sig-name descname">disable</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Breakpoint.disable" title="永久链接至目标"></a></dt>
<dd><p>将此中断点标记为禁用。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Breakpoint.bpformat">
<code class="sig-name descname">bpformat</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Breakpoint.bpformat" title="永久链接至目标"></a></dt>
<dd><p>返回一个带有关于此中断点的所有信息的,格式良好的字符串:</p>
<ul class="simple">
<li><p>此中断点的编号。</p></li>
<li><p>它是否为临时性的。</p></li>
<li><p>它的 file,line 位置。</p></li>
<li><p>导致中断的条件。</p></li>
<li><p>它是否必须在此后被忽略 N 次。</p></li>
<li><p>此中断点的命中计数。</p></li>
</ul>
<div class="versionadded">
<p><span class="versionmodified added">3.2 新版功能.</span></p>
</div>
</dd></dl>
<dl class="method">
<dt id="bdb.Breakpoint.bpprint">
<code class="sig-name descname">bpprint</code><span class="sig-paren">(</span><em class="sig-param">out=None</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Breakpoint.bpprint" title="永久链接至目标"></a></dt>
<dd><p><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> 的输出打印到文件 <em>out</em>,或者如果为 <code class="docutils literal notranslate"><span class="pre">None</span></code> 则打印到标准输出。, to standard output.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="bdb.Bdb">
<em class="property">class </em><code class="sig-prename descclassname">bdb.</code><code class="sig-name descname">Bdb</code><span class="sig-paren">(</span><em class="sig-param">skip=None</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb" title="永久链接至目标"></a></dt>
<dd><p><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> 类是作为通用的 Python 调试器基类。</p>
<p>这个类负责追踪工具的细节;所派生的类应当实现用户交互。 标准调试器类 (<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>) 就是一个例子。</p>
<p>如果给出了 <em>skip</em> 参数,它必须是一个包含 glob 风格的模块名称模式的可迭代对象。 调试器将不会步进到来自与这些模式相匹配的模块的帧。 一个帧是否会被视为来自特定的模块是由帧的 <code class="docutils literal notranslate"><span class="pre">__name__</span></code> 全局变量来确定的。</p>
<div class="versionadded">
<p><span class="versionmodified added">3.1 新版功能: </span><em>skip</em> 参数。</p>
</div>
<p><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> 的以下方法通常不需要被重写。</p>
<dl class="method">
<dt id="bdb.Bdb.canonic">
<code class="sig-name descname">canonic</code><span class="sig-paren">(</span><em class="sig-param">filename</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.canonic" title="永久链接至目标"></a></dt>
<dd><p>用于获取规范形式文件名的辅助方法,也就是大小写规范的(在大小写不敏感文件系统上)绝对路径,并去除两边的尖括号。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.reset">
<code class="sig-name descname">reset</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.reset" title="永久链接至目标"></a></dt>
<dd><p><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><code class="xref py py-attr docutils literal notranslate"><span class="pre">quitting</span></code> 属性设置为准备开始调试的值。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.trace_dispatch">
<code class="sig-name descname">trace_dispatch</code><span class="sig-paren">(</span><em class="sig-param">frame</em>, <em class="sig-param">event</em>, <em class="sig-param">arg</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.trace_dispatch" title="永久链接至目标"></a></dt>
<dd><p>此函数被安装为被调试帧的追踪函数。 它的返回值是新的追踪函数(在大多数情况下就是它自身)。</p>
<p>默认实现会决定如何分派帧,这取决于即将被执行的事件的类型(作为字符串传入)。 <em>event</em> 可以是下列值之一:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">&quot;line&quot;</span></code>: 一个新的代码行即将被执行。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">&quot;call&quot;</span></code>: 一个函数即将被调用,或者进入了另一个代码块。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">&quot;return&quot;</span></code>: 一个函数或其他代码块即将返回。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">&quot;exception&quot;</span></code>: 一个异常已发生。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">&quot;c_call&quot;</span></code>: 一个 C 函数即将被调用。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">&quot;c_return&quot;</span></code>: 一个 C 函数已返回。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">&quot;c_exception&quot;</span></code>: 一个 C 函数引发了异常。</p></li>
</ul>
<p>对于 Python 事件,调用了专门的函数(见下文)。 对于 C 事件,不执行任何操作。</p>
<p><em>arg</em> 形参取决于之前的事件。</p>
<p>请参阅 <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> 的文档了解追踪函数的更多信息。 对于代码和帧对象的详情,请参考 <a class="reference internal" href="../reference/datamodel.html#types"><span class="std std-ref">标准类型层级结构</span></a></p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.dispatch_line">
<code class="sig-name descname">dispatch_line</code><span class="sig-paren">(</span><em class="sig-param">frame</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.dispatch_line" title="永久链接至目标"></a></dt>
<dd><p>如果调试器应当在当前行上停止,则发起调用 <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> 方法(该方法应当在子类中被重写)。 如果设置了 <code class="xref py py-attr docutils literal notranslate"><span class="pre">Bdb.quitting</span></code> 旗标(可以通过 <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> 设置)则将引发 <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> 异常。 返回一个对 <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> 方法的引用以便在该作用域内进一步地追踪。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.dispatch_call">
<code class="sig-name descname">dispatch_call</code><span class="sig-paren">(</span><em class="sig-param">frame</em>, <em class="sig-param">arg</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.dispatch_call" title="永久链接至目标"></a></dt>
<dd><p>如果调试器应当在此函数调用上停止,则发起调用 <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> 方法(该方法应当在子类中被重写)。 如果设置了 <code class="xref py py-attr docutils literal notranslate"><span class="pre">Bdb.quitting</span></code> 旗标(可以通过 <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> 设置)则将引发 <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> 异常。 返回一个对 <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> 方法的引用以便在该作用域内进一步地追踪。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.dispatch_return">
<code class="sig-name descname">dispatch_return</code><span class="sig-paren">(</span><em class="sig-param">frame</em>, <em class="sig-param">arg</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.dispatch_return" title="永久链接至目标"></a></dt>
<dd><p>如果调试器应当在此函数返回时停止,则发起调用 <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> 方法(该方法应当在子类中被重写)。 如果设置了 <code class="xref py py-attr docutils literal notranslate"><span class="pre">Bdb.quitting</span></code> 旗标(可以通过 <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> 设置)则将引发 <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> 异常。 返回一个对 <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> 方法的引用以便在该作用域内进一步地追踪。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.dispatch_exception">
<code class="sig-name descname">dispatch_exception</code><span class="sig-paren">(</span><em class="sig-param">frame</em>, <em class="sig-param">arg</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.dispatch_exception" title="永久链接至目标"></a></dt>
<dd><p>如果调试器应当在此异常上停止,则发起调用 <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> 方法(该方法应当在子类中被重写)。 如果设置了 <code class="xref py py-attr docutils literal notranslate"><span class="pre">Bdb.quitting</span></code> 旗标(可以通过 <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> 设置)则将引发 <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> 异常。 返回一个对 <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> 方法的引用以便在该作用域内进一步地追踪。</p>
</dd></dl>
<p>通常情况下派生的类不会重写下列方法,但是如果想要重新定义停止和中断点的定义则可能会重写它们。</p>
<dl class="method">
<dt id="bdb.Bdb.stop_here">
<code class="sig-name descname">stop_here</code><span class="sig-paren">(</span><em class="sig-param">frame</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.stop_here" title="永久链接至目标"></a></dt>
<dd><p>此方法将检查调用栈中 <em>frame</em> 是否位于 <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">botframe</span></code> 是调试开始所在的帧。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.break_here">
<code class="sig-name descname">break_here</code><span class="sig-paren">(</span><em class="sig-param">frame</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.break_here" title="永久链接至目标"></a></dt>
<dd><p>此方法将检查 <em>frame</em> 所属的文件名和行,或者至少当前函数中是否存在中断点。 如果中断点是临时性的,此方法将删除它。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.break_anywhere">
<code class="sig-name descname">break_anywhere</code><span class="sig-paren">(</span><em class="sig-param">frame</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.break_anywhere" title="永久链接至目标"></a></dt>
<dd><p>此方法将检查当前帧的文件名中是否存在中断点。</p>
</dd></dl>
<p>派生的类应当重写这些方法以获取调试器操作的控制权。</p>
<dl class="method">
<dt id="bdb.Bdb.user_call">
<code class="sig-name descname">user_call</code><span class="sig-paren">(</span><em class="sig-param">frame</em>, <em class="sig-param">argument_list</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.user_call" title="永久链接至目标"></a></dt>
<dd><p>当有可能在被调用函数内部的任何地方需要一个中断时此方法将从 <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> 被调用。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.user_line">
<code class="sig-name descname">user_line</code><span class="sig-paren">(</span><em class="sig-param">frame</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.user_line" title="永久链接至目标"></a></dt>
<dd><p><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><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> 产生 <code class="docutils literal notranslate"><span class="pre">True</span></code> 时此方法将从 <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> 被调用。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.user_return">
<code class="sig-name descname">user_return</code><span class="sig-paren">(</span><em class="sig-param">frame</em>, <em class="sig-param">return_value</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.user_return" title="永久链接至目标"></a></dt>
<dd><p><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> 产生 <code class="docutils literal notranslate"><span class="pre">True</span></code> 时此方法将从 <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> 被调用。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.user_exception">
<code class="sig-name descname">user_exception</code><span class="sig-paren">(</span><em class="sig-param">frame</em>, <em class="sig-param">exc_info</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.user_exception" title="永久链接至目标"></a></dt>
<dd><p><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> 产生 <code class="docutils literal notranslate"><span class="pre">True</span></code> 时此方法将从 <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> 被调用。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.do_clear">
<code class="sig-name descname">do_clear</code><span class="sig-paren">(</span><em class="sig-param">arg</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.do_clear" title="永久链接至目标"></a></dt>
<dd><p>处理当一个中断点属于临时性中断点时是否必须要移除它。</p>
<p>此方法必须由派生类来实现。</p>
</dd></dl>
<p>派生类与客户端可以调用以下方法来影响步进状态。</p>
<dl class="method">
<dt id="bdb.Bdb.set_step">
<code class="sig-name descname">set_step</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.set_step" title="永久链接至目标"></a></dt>
<dd><p>在一行代码之后停止。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.set_next">
<code class="sig-name descname">set_next</code><span class="sig-paren">(</span><em class="sig-param">frame</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.set_next" title="永久链接至目标"></a></dt>
<dd><p>在给定的帧以内或以下的下一行停止。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.set_return">
<code class="sig-name descname">set_return</code><span class="sig-paren">(</span><em class="sig-param">frame</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.set_return" title="永久链接至目标"></a></dt>
<dd><p>当从给定的帧返回时停止。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.set_until">
<code class="sig-name descname">set_until</code><span class="sig-paren">(</span><em class="sig-param">frame</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.set_until" title="永久链接至目标"></a></dt>
<dd><p>当到达不大于当前行的行或当从当前帧返回时停止。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.set_trace">
<code class="sig-name descname">set_trace</code><span class="sig-paren">(</span><span class="optional">[</span><em class="sig-param">frame</em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.set_trace" title="永久链接至目标"></a></dt>
<dd><p><em>frame</em> 开始调试。 如果未指定 <em>frame</em>,则从调用者的帧开始调试。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.set_continue">
<code class="sig-name descname">set_continue</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.set_continue" title="永久链接至目标"></a></dt>
<dd><p>仅在中断点上或是当结束时停止。 如果不存在中断点,则将系统追踪函数设为 <code class="docutils literal notranslate"><span class="pre">None</span></code></p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.set_quit">
<code class="sig-name descname">set_quit</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.set_quit" title="永久链接至目标"></a></dt>
<dd><p><code class="xref py py-attr docutils literal notranslate"><span class="pre">quitting</span></code> 属性设为 <code class="docutils literal notranslate"><span class="pre">True</span></code>。 这将在对某个 <code class="xref py py-meth docutils literal notranslate"><span class="pre">dispatch_*()</span></code> 方法的下一次调用中引发 <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></p>
</dd></dl>
<p>派生的类和客户端可以调用下列方法来操纵中断点。 如果出现错误则这些方法将返回一个包含错误消息的字符串,或者如果一切正常则返回 <code class="docutils literal notranslate"><span class="pre">None</span></code></p>
<dl class="method">
<dt id="bdb.Bdb.set_break">
<code class="sig-name descname">set_break</code><span class="sig-paren">(</span><em class="sig-param">filename</em>, <em class="sig-param">lineno</em>, <em class="sig-param">temporary=0</em>, <em class="sig-param">cond</em>, <em class="sig-param">funcname</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.set_break" title="永久链接至目标"></a></dt>
<dd><p>设置一个新的中断点。 如果对于作为参数传入的 <em>filename</em> 不存在 <em>lineno</em>,则返回一条错误消息。 <em>filename</em> 应为规范的形式,如在 <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> 方法中描述的。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.clear_break">
<code class="sig-name descname">clear_break</code><span class="sig-paren">(</span><em class="sig-param">filename</em>, <em class="sig-param">lineno</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.clear_break" title="永久链接至目标"></a></dt>
<dd><p>删除位于 <em>filename</em><em>lineno</em> 上的中断点。 如果未设置过中断点。 则将返回一条错误消息。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.clear_bpbynumber">
<code class="sig-name descname">clear_bpbynumber</code><span class="sig-paren">(</span><em class="sig-param">arg</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.clear_bpbynumber" title="永久链接至目标"></a></dt>
<dd><p>删除 <code class="xref py py-attr docutils literal notranslate"><span class="pre">Breakpoint.bpbynumber</span></code> 中索引号为 <em>arg</em> 的中断点。 如果 <em>arg</em> 不是数字或超出范围,则返回一条错误消息。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.clear_all_file_breaks">
<code class="sig-name descname">clear_all_file_breaks</code><span class="sig-paren">(</span><em class="sig-param">filename</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.clear_all_file_breaks" title="永久链接至目标"></a></dt>
<dd><p>删除 <em>filename</em> 中的所有中断点。 如果未设置任何中断点,则返回一条错误消息。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.clear_all_breaks">
<code class="sig-name descname">clear_all_breaks</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.clear_all_breaks" title="永久链接至目标"></a></dt>
<dd><p>删除全部现有的中断点。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.get_bpbynumber">
<code class="sig-name descname">get_bpbynumber</code><span class="sig-paren">(</span><em class="sig-param">arg</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.get_bpbynumber" title="永久链接至目标"></a></dt>
<dd><p>返回由指定数字所指明的中断点。 如果 <em>arg</em> 是一个字符串,它将被转换为一个数字。 如果 <em>arg</em> 不是一个表示数字的字符串,如果给定的中断点不存在或者已被删除,则会引发 <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></p>
<div class="versionadded">
<p><span class="versionmodified added">3.2 新版功能.</span></p>
</div>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.get_break">
<code class="sig-name descname">get_break</code><span class="sig-paren">(</span><em class="sig-param">filename</em>, <em class="sig-param">lineno</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.get_break" title="永久链接至目标"></a></dt>
<dd><p>检查 <em>filename</em> 中在 <em>lineno</em> 上是否有中断点。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.get_breaks">
<code class="sig-name descname">get_breaks</code><span class="sig-paren">(</span><em class="sig-param">filename</em>, <em class="sig-param">lineno</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.get_breaks" title="永久链接至目标"></a></dt>
<dd><p>返回 <em>filename</em> 中在 <em>lineno</em> 上的所有中断点,或者如果未设置任何中断点则返回一个空列表。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.get_file_breaks">
<code class="sig-name descname">get_file_breaks</code><span class="sig-paren">(</span><em class="sig-param">filename</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.get_file_breaks" title="永久链接至目标"></a></dt>
<dd><p>返回 <em>filename</em> 中的所有中断点,或者如果未设置任何中断点则返回一个空列表。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.get_all_breaks">
<code class="sig-name descname">get_all_breaks</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.get_all_breaks" title="永久链接至目标"></a></dt>
<dd><p>返回已设置的所有中断点。</p>
</dd></dl>
<p>派生类与客户端可以调用以下方法来获取一个代表栈回溯信息的数组结构。</p>
<dl class="method">
<dt id="bdb.Bdb.get_stack">
<code class="sig-name descname">get_stack</code><span class="sig-paren">(</span><em class="sig-param">f</em>, <em class="sig-param">t</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.get_stack" title="永久链接至目标"></a></dt>
<dd><p>获取一个帧及其所有上级(调用方)和下级帧的记录列表,以及上级部分的大小。</p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.format_stack_entry">
<code class="sig-name descname">format_stack_entry</code><span class="sig-paren">(</span><em class="sig-param">frame_lineno</em>, <em class="sig-param">lprefix=': '</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.format_stack_entry" title="永久链接至目标"></a></dt>
<dd><p>返回一个包含有关栈条目信息的字符串,由一个 <code class="docutils literal notranslate"><span class="pre">(frame,</span> <span class="pre">lineno)</span></code> 元组来标识:</p>
<ul class="simple">
<li><p>包含帧的规范形式的文件名。</p></li>
<li><p>函数名称,或者 <code class="docutils literal notranslate"><span class="pre">&quot;&lt;lambda&gt;&quot;</span></code></p></li>
<li><p>输入参数。</p></li>
<li><p>返回值。</p></li>
<li><p>代码的行(如果存在)。</p></li>
</ul>
</dd></dl>
<p>以下两个方法可由客户端调用以使用一个调试器来调试一条以字符串形式给出的 <a class="reference internal" href="../glossary.html#term-statement"><span class="xref std std-term">statement</span></a></p>
<dl class="method">
<dt id="bdb.Bdb.run">
<code class="sig-name descname">run</code><span class="sig-paren">(</span><em class="sig-param">cmd</em>, <em class="sig-param">globals=None</em>, <em class="sig-param">locals=None</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.run" title="永久链接至目标"></a></dt>
<dd><p>调试一条通过 <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> 函数执行的语句。 <em>globals</em> 默认为 <code class="xref py py-attr docutils literal notranslate"><span class="pre">__main__.__dict__</span></code><em>locals</em> 默认为 <em>globals</em></p>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.runeval">
<code class="sig-name descname">runeval</code><span class="sig-paren">(</span><em class="sig-param">expr</em>, <em class="sig-param">globals=None</em>, <em class="sig-param">locals=None</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.runeval" title="永久链接至目标"></a></dt>
<dd><p>调试一条通过 <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> 函数执行的表达式。 <em>globals</em><em>locals</em> 的含义与在 <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>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.runctx">
<code class="sig-name descname">runctx</code><span class="sig-paren">(</span><em class="sig-param">cmd</em>, <em class="sig-param">globals</em>, <em class="sig-param">locals</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.runctx" title="永久链接至目标"></a></dt>
<dd><p>为了保证向下兼容性。 调用 <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>
</dd></dl>
<dl class="method">
<dt id="bdb.Bdb.runcall">
<code class="sig-name descname">runcall</code><span class="sig-paren">(</span><em class="sig-param">func</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwds</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.Bdb.runcall" title="永久链接至目标"></a></dt>
<dd><p>调试一个单独的函数调用,并返回其结果。</p>
</dd></dl>
</dd></dl>
<p>最后,这个模块定义了以下函数:</p>
<dl class="function">
<dt id="bdb.checkfuncname">
<code class="sig-prename descclassname">bdb.</code><code class="sig-name descname">checkfuncname</code><span class="sig-paren">(</span><em class="sig-param">b</em>, <em class="sig-param">frame</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.checkfuncname" title="永久链接至目标"></a></dt>
<dd><p>检查是否应当在此中断,根据中断点 <em>b</em> 的设置方式。</p>
<p>如果是通过行号设置的,它将检查 <code class="docutils literal notranslate"><span class="pre">b.line</span></code> 是否与同样作为参数传入的帧中的行号一致。 如果中断点是通过函数名称设置的,则必须检查是否位于正确的帧(正确的函数)以及是否位于其中第一个可执行的行。</p>
</dd></dl>
<dl class="function">
<dt id="bdb.effective">
<code class="sig-prename descclassname">bdb.</code><code class="sig-name descname">effective</code><span class="sig-paren">(</span><em class="sig-param">file</em>, <em class="sig-param">line</em>, <em class="sig-param">frame</em><span class="sig-paren">)</span><a class="headerlink" href="#bdb.effective" title="永久链接至目标"></a></dt>
<dd><p>确定在这一行代码中是否存在有效的(激活的)中断点。 返回一个包含中断点和表示是否可以删除临时中断点的布尔值的元组。 如果没有匹配的中断点则返回 <code class="docutils literal notranslate"><span class="pre">(None,</span> <span class="pre">None)</span></code></p>
</dd></dl>
<dl class="function">
<dt id="bdb.set_trace">
<code class="sig-prename descclassname">bdb.</code><code class="sig-name descname">set_trace</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#bdb.set_trace" title="永久链接至目标"></a></dt>
<dd><p>使用一个来自调用方的帧的 <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> 实例开始调试。</p>
</dd></dl>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h4>上一个主题</h4>
<p class="topless"><a href="audit_events.html"
title="上一章">审计事件表</a></p>
<h4>下一个主题</h4>
<p class="topless"><a href="faulthandler.html"
title="下一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">faulthandler</span></code> —— 转储 Python 的跟踪信息</a></p>
<div role="note" aria-label="source link">
<h3>本页</h3>
<ul class="this-page-menu">
<li><a href="../bugs.html">报告 Bug</a></li>
<li>
<a href="https://github.com/python/cpython/blob/3.8/Doc/library/bdb.rst"
rel="nofollow">显示源代码
</a>
</li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>导航</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="总目录"
>索引</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python 模块索引"
>模块</a> |</li>
<li class="right" >
<a href="faulthandler.html" title="faulthandler —— 转储 Python 的跟踪信息"
>下一页</a> |</li>
<li class="right" >
<a href="audit_events.html" title="审计事件表"
>上一页</a> |</li>
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> &#187;</li>
<li class="switchers">
<div class="language_switcher_placeholder"></div>
<div class="version_switcher_placeholder"></div>
</li>
<li>
</li>
<li id="cpython-language-and-version">
<a href="../index.html">3.8.20 Documentation</a> &#187;
</li>
<li class="nav-item nav-item-1"><a href="index.html" >Python 标准库</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="debug.html" >调试和分析</a> &#187;</li>
<li class="right">
<div class="inline-search" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
<input type="submit" value="转向" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
|
</li>
</ul>
</div>
<div class="footer">
&copy; <a href="../copyright.html">版权所有</a> 2001-2024, Python Software Foundation.
<br />
This page is licensed under the Python Software Foundation License Version 2.
<br />
Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
<br />
<br />
The Python Software Foundation is a non-profit corporation.
<a href="https://www.python.org/psf/donations/">Please donate.</a>
<br />
<br />
最后更新于 12月 09, 2024.
<a href="https://docs.python.org/3/bugs.html">Found a bug</a>?
<br />
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 2.4.4.
</div>
</body>
</html>