“Python/docs/3.9/library/bdb”的版本间差异

来自菜鸟教程
Python/docs/3.9/library/bdb
跳转至:导航、​搜索
(autoload)
 
(Page commit)
 
第1行: 第1行:
 +
{{DISPLAYTITLE:bdb — 调试器框架 — Python 文档}}
 
<div id="module-bdb" class="section">
 
<div id="module-bdb" class="section">
  
 
<span id="bdb-debugger-framework"></span>
 
<span id="bdb-debugger-framework"></span>
= [[#module-bdb|<code>bdb</code>]] --- Debugger framework =
+
= bdb — 调试器框架 =
  
'''Source code:''' [https://github.com/python/cpython/tree/3.9/Lib/bdb.py Lib/bdb.py]
+
'''源代码:''' [[#id1|<span id="id2" class="problematic">:source:`Lib/bdb.py`</span>]]
  
The [[#module-bdb|<code>bdb</code>]] module handles basic debugger functions, like setting breakpoints
 
or managing execution via the debugger.
 
  
The following exception is defined:
+
-----
  
; ''exception'' <code>bdb.</code><code>BdbQuit</code>
+
[[#module-bdb|bdb]] 模块处理基本的调试器功能,例如设置断点或通过调试器管理执行。
: Exception raised by the [[#bdb.Bdb|<code>Bdb</code>]] class for quitting the debugger.
 
  
The [[#module-bdb|<code>bdb</code>]] module also defines two classes:
+
定义了以下异常:
 +
 
 +
; ''<span class="pre">exception</span>'' <span class="sig-prename descclassname"><span class="pre">bdb.</span></span><span class="sig-name descname"><span class="pre">BdbQuit</span></span>
 +
: [[#bdb.Bdb|Bdb]] 类为退出调试器引发的异常。
 +
 
 +
[[#module-bdb|bdb]] 模块还定义了两个类:
  
 
<dl>
 
<dl>
<dt>''class'' <code>bdb.</code><code>Breakpoint</code><span class="sig-paren">(</span>''<span class="n">self</span>'', ''<span class="n">file</span>'', ''<span class="n">line</span>'', ''<span class="n">temporary</span><span class="o">=</span><span class="default_value">0</span>'', ''<span class="n">cond</span><span class="o">=</span><span class="default_value">None</span>'', ''<span class="n">funcname</span><span class="o">=</span><span class="default_value">None</span>''<span class="sig-paren">)</span></dt>
+
<dt>''<span class="pre">class</span>'' <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>''<span class="n"><span class="pre">self</span></span>'', ''<span class="n"><span class="pre">file</span></span>'', ''<span class="n"><span class="pre">line</span></span>'', ''<span class="n"><span class="pre">temporary</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span>'', ''<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>'', ''<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>''<span class="sig-paren">)</span></dt>
<dd><p>This class implements temporary breakpoints, ignore counts, disabling and
+
<dd><p>此类实现临时断点、忽略计数、禁用和(重新)启用以及条件。</p>
(re-)enabling, and conditionals.</p>
+
<p>断点通过名为 <code>bpbynumber</code> 的列表按编号进行索引,并通过 <code>(file, line)</code> 对通过 <code>bplist</code> 进行索引。 前者指向类 [[#bdb.Breakpoint|Breakpoint]] 的单个实例。 后者指向此类实例的列表,因为每行可能有多个断点。</p>
<p>Breakpoints are indexed by number through a list called <code>bpbynumber</code>
+
<p>创建断点时,其关联的文件名应采用规范格式。 如果定义了 ''funcname'',则在执行该函数的第一行时将计算断点命中。 条件断点始终计为命中。</p>
and by <code>(file, line)</code> pairs through <code>bplist</code>. The former points to a
+
<p>[[#bdb.Breakpoint|Breakpoint]] 实例有以下方法:</p>
single instance of class [[#bdb.Breakpoint|<code>Breakpoint</code>]]. The latter points to a list of
 
such instances since there may be more than one breakpoint per line.</p>
 
<p>When creating a breakpoint, its associated filename should be in canonical
 
form. If a ''funcname'' is defined, a breakpoint hit will be counted when the
 
first line of that function is executed. A conditional breakpoint always
 
counts a hit.</p>
 
<p>[[#bdb.Breakpoint|<code>Breakpoint</code>]] instances have the following methods:</p>
 
 
<dl>
 
<dl>
<dt><code>deleteMe</code><span class="sig-paren">(</span><span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">deleteMe</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span></dt>
<dd><p>Delete the breakpoint from the list associated to a file/line. If it is
+
<dd><p>从与文件/行关联的列表中删除断点。 如果它是该位置的最后一个断点,它还会删除文件/行的条目。</p></dd></dl>
the last breakpoint in that position, it also deletes the entry for the
 
file/line.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>enable</code><span class="sig-paren">(</span><span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">enable</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span></dt>
<dd><p>Mark the breakpoint as enabled.</p></dd></dl>
+
<dd><p>将断点标记为已启用。</p></dd></dl>
  
 
<dl>
 
<dl>
<dt><code>disable</code><span class="sig-paren">(</span><span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">disable</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span></dt>
<dd><p>Mark the breakpoint as disabled.</p></dd></dl>
+
<dd><p>将断点标记为禁用。</p></dd></dl>
  
 
<dl>
 
<dl>
<dt><code>bpformat</code><span class="sig-paren">(</span><span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">bpformat</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span></dt>
<dd><p>Return a string with all the information about the breakpoint, nicely
+
<dd><p>返回一个包含断点所有信息的字符串,格式很好:</p>
formatted:</p>
 
 
<ul>
 
<ul>
<li><p>The breakpoint number.</p></li>
+
<li><p>断点编号。</p></li>
<li><p>If it is temporary or not.</p></li>
+
<li><p>如果是暂时的。</p></li>
<li><p>Its file,line position.</p></li>
+
<li><p>它的文件,行位置。</p></li>
<li><p>The condition that causes a break.</p></li>
+
<li><p>导致中断的条件。</p></li>
<li><p>If it must be ignored the next N times.</p></li>
+
<li><p>如果它必须在接下来的 N 次被忽略。</p></li>
<li><p>The breakpoint hit count.</p></li></ul>
+
<li><p>断点命中数。</p></li></ul>
  
 
<div class="versionadded">
 
<div class="versionadded">
  
<p><span class="versionmodified added">3.2 新版功能.</span></p>
+
<p><span class="versionmodified added">3.2 版中的新功能。</span></p>
  
 
</div></dd></dl>
 
</div></dd></dl>
  
 
<dl>
 
<dl>
<dt><code>bpprint</code><span class="sig-paren">(</span>''<span class="n">out</span><span class="o">=</span><span class="default_value">None</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">bpprint</span></span><span class="sig-paren">(</span>''<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>''<span class="sig-paren">)</span></dt>
<dd><p>Print the output of [[#bdb.Breakpoint.bpformat|<code>bpformat()</code>]] to the file ''out'', or if it is
+
<dd><p>[[#bdb.Breakpoint.bpformat|bpformat()]] 的输出打印到文件 ''out'',如果是 <code>None</code>,则打印到标准输出。</p></dd></dl>
<code>None</code>, to standard output.</p></dd></dl>
 
 
</dd></dl>
 
</dd></dl>
  
 
<dl>
 
<dl>
<dt>''class'' <code>bdb.</code><code>Bdb</code><span class="sig-paren">(</span>''<span class="n">skip</span><span class="o">=</span><span class="default_value">None</span>''<span class="sig-paren">)</span></dt>
+
<dt>''<span class="pre">class</span>'' <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>''<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>''<span class="sig-paren">)</span></dt>
<dd><p>The [[#bdb.Bdb|<code>Bdb</code>]] class acts as a generic Python debugger base class.</p>
+
<dd><p>[[#bdb.Bdb|Bdb]] 类充当通用 Python 调试器基类。</p>
<p>This class takes care of the details of the trace facility; a derived class
+
<p>这个类负责跟踪设施的细节; 派生类应该实现用户交互。 标准调试器类 ([[../pdb#pdb|pdb.Pdb]]) 就是一个例子。</p>
should implement user interaction. The standard debugger class
+
<p>''skip'' 参数(如果给定)必须是全局样式模块名称模式的可迭代对象。 调试器不会进入源自与这些模式之一匹配的模块的帧。 帧是否被认为源自某个模块由帧全局变量中的 <code>__name__</code> 决定。</p>
([[../pdb#pdb|<code>pdb.Pdb</code>]]) is an example.</p>
 
<p>The ''skip'' argument, if given, must be an iterable of glob-style
 
module name patterns. The debugger will not step into frames that
 
originate in a module that matches one of these patterns. Whether a
 
frame is considered to originate in a certain module is determined
 
by the <code>__name__</code> in the frame globals.</p>
 
 
<div class="versionadded">
 
<div class="versionadded">
  
<p><span class="versionmodified added">3.1 新版功能: </span>The ''skip'' argument.</p>
+
<p><span class="versionmodified added"> 3.1 版新功能: </span> ''skip'' 参数。</p>
  
 
</div>
 
</div>
<p>The following methods of [[#bdb.Bdb|<code>Bdb</code>]] normally don't need to be overridden.</p>
+
<p>[[#bdb.Bdb|Bdb]] 的以下方法通常不需要被覆盖。</p>
 
<dl>
 
<dl>
<dt><code>canonic</code><span class="sig-paren">(</span>''<span class="n">filename</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">canonic</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">filename</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Auxiliary method for getting a filename in a canonical form, that is, as a
+
<dd><p>以规范形式获取文件名的辅助方法,即作为大小写规范化(在不区分大小写的文件系统上)绝对路径,去掉周围的尖括号。</p></dd></dl>
case-normalized (on case-insensitive filesystems) absolute path, stripped
 
of surrounding angle brackets.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>reset</code><span class="sig-paren">(</span><span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">reset</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span></dt>
<dd><p>Set the <code>botframe</code>, <code>stopframe</code>, <code>returnframe</code> and
+
<dd><p><code>botframe</code><code>stopframe</code><code>returnframe</code> <code>quitting</code> 属性设置为准备开始调试的值。</p></dd></dl>
<code>quitting</code> attributes with values ready to start debugging.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>trace_dispatch</code><span class="sig-paren">(</span>''<span class="n">frame</span>'', ''<span class="n">event</span>'', ''<span class="n">arg</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">trace_dispatch</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">frame</span></span>'', ''<span class="n"><span class="pre">event</span></span>'', ''<span class="n"><span class="pre">arg</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>This function is installed as the trace function of debugged frames. Its
+
<dd><p>此功能安装为调试帧的跟踪功能。 它的返回值是新的跟踪函数(在大多数情况下,也就是它自己)。</p>
return value is the new trace function (in most cases, that is, itself).</p>
+
<p>默认实现决定如何分派帧,具体取决于即将执行的事件类型(作为字符串传递)。 ''event'' 可以是以下之一:</p>
<p>The default implementation decides how to dispatch a frame, depending on
 
the type of event (passed as a string) that is about to be executed.
 
''event'' can be one of the following:</p>
 
 
<ul>
 
<ul>
<li><p><code>&quot;line&quot;</code>: A new line of code is going to be executed.</p></li>
+
<li><p><code>&quot;line&quot;</code>:将要执行新的一行代码。</p></li>
<li><p><code>&quot;call&quot;</code>: A function is about to be called, or another code block
+
<li><p><code>&quot;call&quot;</code>:一个函数即将被调用,或者另一个代码块被输入。</p></li>
entered.</p></li>
+
<li><p><code>&quot;return&quot;</code>:函数或其他代码块即将返回。</p></li>
<li><p><code>&quot;return&quot;</code>: A function or other code block is about to return.</p></li>
+
<li><p><code>&quot;exception&quot;</code>:发生异常。</p></li>
<li><p><code>&quot;exception&quot;</code>: An exception has occurred.</p></li>
+
<li><p><code>&quot;c_call&quot;</code>:即将调用AC函数。</p></li>
<li><p><code>&quot;c_call&quot;</code>: A C function is about to be called.</p></li>
+
<li><p><code>&quot;c_return&quot;</code>:AC 功能已返回。</p></li>
<li><p><code>&quot;c_return&quot;</code>: A C function has returned.</p></li>
+
<li><p><code>&quot;c_exception&quot;</code>:AC 函数引发异常。</p></li></ul>
<li><p><code>&quot;c_exception&quot;</code>: A C function has raised an exception.</p></li></ul>
 
  
<p>For the Python events, specialized functions (see below) are called. For
+
<p>对于 Python 事件,会调用专门的函数(见下文)。 对于 C 事件,不采取任何行动。</p>
the C events, no action is taken.</p>
+
<p>''arg'' 参数取决于前一个事件。</p>
<p>The ''arg'' parameter depends on the previous event.</p>
+
<p>有关跟踪功能的更多信息,请参阅 [[../sys#sys|sys.settrace()]] 的文档。 有关代码和框架对象的更多信息,请参阅 [[../../reference/datamodel#types|标准类型层次结构]] </p></dd></dl>
<p>See the documentation for [[../sys#sys|<code>sys.settrace()</code>]] for more information on the
 
trace function. For more information on code and frame objects, refer to
 
[[../../reference/datamodel#types|<span class="std std-ref">The standard type hierarchy</span>]].</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>dispatch_line</code><span class="sig-paren">(</span>''<span class="n">frame</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">dispatch_line</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">frame</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>If the debugger should stop on the current line, invoke the
+
<dd><p>如果调试器应该在当前行停止,调用 [[#bdb.Bdb.user_line|user_line()]] 方法(应该在子类中覆盖)。 如果设置了 <code>Bdb.quitting</code> 标志(可以从 [[#bdb.Bdb.user_line|user_line()]] 设置),则引发 [[#bdb.BdbQuit|BdbQuit]] 异常。 返回对 [[#bdb.Bdb.trace_dispatch|trace_dispatch()]] 方法的引用,以便在该范围内进一步跟踪。</p></dd></dl>
[[#bdb.Bdb.user_line|<code>user_line()</code>]] method (which should be overridden in subclasses).
 
Raise a [[#bdb.BdbQuit|<code>BdbQuit</code>]] exception if the <code>Bdb.quitting</code> flag is set
 
(which can be set from [[#bdb.Bdb.user_line|<code>user_line()</code>]]). Return a reference to the
 
[[#bdb.Bdb.trace_dispatch|<code>trace_dispatch()</code>]] method for further tracing in that scope.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>dispatch_call</code><span class="sig-paren">(</span>''<span class="n">frame</span>'', ''<span class="n">arg</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">dispatch_call</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">frame</span></span>'', ''<span class="n"><span class="pre">arg</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>If the debugger should stop on this function call, invoke the
+
<dd><p>如果调试器应在此函数调用上停止,请调用 [[#bdb.Bdb.user_call|user_call()]] 方法(应在子类中覆盖)。 如果设置了 <code>Bdb.quitting</code> 标志(可以从 [[#bdb.Bdb.user_call|user_call()]] 设置),则引发 [[#bdb.BdbQuit|BdbQuit]] 异常。 返回对 [[#bdb.Bdb.trace_dispatch|trace_dispatch()]] 方法的引用,以便在该范围内进一步跟踪。</p></dd></dl>
[[#bdb.Bdb.user_call|<code>user_call()</code>]] method (which should be overridden in subclasses).
 
Raise a [[#bdb.BdbQuit|<code>BdbQuit</code>]] exception if the <code>Bdb.quitting</code> flag is set
 
(which can be set from [[#bdb.Bdb.user_call|<code>user_call()</code>]]). Return a reference to the
 
[[#bdb.Bdb.trace_dispatch|<code>trace_dispatch()</code>]] method for further tracing in that scope.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>dispatch_return</code><span class="sig-paren">(</span>''<span class="n">frame</span>'', ''<span class="n">arg</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">dispatch_return</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">frame</span></span>'', ''<span class="n"><span class="pre">arg</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>If the debugger should stop on this function return, invoke the
+
<dd><p>如果调试器应在此函数返回时停止,请调用 [[#bdb.Bdb.user_return|user_return()]] 方法(应在子类中覆盖)。 如果设置了 <code>Bdb.quitting</code> 标志(可以从 [[#bdb.Bdb.user_return|user_return()]] 设置),则引发 [[#bdb.BdbQuit|BdbQuit]] 异常。 返回对 [[#bdb.Bdb.trace_dispatch|trace_dispatch()]] 方法的引用,以便在该范围内进一步跟踪。</p></dd></dl>
[[#bdb.Bdb.user_return|<code>user_return()</code>]] method (which should be overridden in subclasses).
 
Raise a [[#bdb.BdbQuit|<code>BdbQuit</code>]] exception if the <code>Bdb.quitting</code> flag is set
 
(which can be set from [[#bdb.Bdb.user_return|<code>user_return()</code>]]). Return a reference to the
 
[[#bdb.Bdb.trace_dispatch|<code>trace_dispatch()</code>]] method for further tracing in that scope.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>dispatch_exception</code><span class="sig-paren">(</span>''<span class="n">frame</span>'', ''<span class="n">arg</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">dispatch_exception</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">frame</span></span>'', ''<span class="n"><span class="pre">arg</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>If the debugger should stop at this exception, invokes the
+
<dd><p>如果调试器应在此异常处停止,则调用 [[#bdb.Bdb.user_exception|user_exception()]] 方法(应在子类中覆盖)。 如果设置了 <code>Bdb.quitting</code> 标志(可以从 [[#bdb.Bdb.user_exception|user_exception()]] 设置),则引发 [[#bdb.BdbQuit|BdbQuit]] 异常。 返回对 [[#bdb.Bdb.trace_dispatch|trace_dispatch()]] 方法的引用,以便在该范围内进一步跟踪。</p></dd></dl>
[[#bdb.Bdb.user_exception|<code>user_exception()</code>]] method (which should be overridden in subclasses).
 
Raise a [[#bdb.BdbQuit|<code>BdbQuit</code>]] exception if the <code>Bdb.quitting</code> flag is set
 
(which can be set from [[#bdb.Bdb.user_exception|<code>user_exception()</code>]]). Return a reference to the
 
[[#bdb.Bdb.trace_dispatch|<code>trace_dispatch()</code>]] method for further tracing in that scope.</p></dd></dl>
 
  
<p>Normally derived classes don't override the following methods, but they may
+
<p>通常派生类不会覆盖以下方法,但如果他们想重新定义停止和断点的定义,它们可能会覆盖。</p>
if they want to redefine the definition of stopping and breakpoints.</p>
 
 
<dl>
 
<dl>
<dt><code>stop_here</code><span class="sig-paren">(</span>''<span class="n">frame</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">stop_here</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">frame</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>This method checks if the ''frame'' is somewhere below <code>botframe</code> in
+
<dd><p>此方法检查 '''' 是否在调用堆栈中的 <code>botframe</code> 以下某处。 <code>botframe</code> 是调试开始的帧。</p></dd></dl>
the call stack. <code>botframe</code> is the frame in which debugging started.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>break_here</code><span class="sig-paren">(</span>''<span class="n">frame</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">break_here</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">frame</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>This method checks if there is a breakpoint in the filename and line
+
<dd><p>此方法检查文件名和属于 ''frame'' 的行中或至少在当前函数中是否存在断点。 如果断点是临时断点,则此方法将其删除。</p></dd></dl>
belonging to ''frame'' or, at least, in the current function. If the
 
breakpoint is a temporary one, this method deletes it.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>break_anywhere</code><span class="sig-paren">(</span>''<span class="n">frame</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">break_anywhere</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">frame</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>This method checks if there is a breakpoint in the filename of the current
+
<dd><p>此方法检查当前帧的文件名中是否存在断点。</p></dd></dl>
frame.</p></dd></dl>
 
  
<p>Derived classes should override these methods to gain control over debugger
+
<p>派生类应该覆盖这些方法以获得对调试器操作的控制。</p>
operation.</p>
 
 
<dl>
 
<dl>
<dt><code>user_call</code><span class="sig-paren">(</span>''<span class="n">frame</span>'', ''<span class="n">argument_list</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">user_call</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">frame</span></span>'', ''<span class="n"><span class="pre">argument_list</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>This method is called from [[#bdb.Bdb.dispatch_call|<code>dispatch_call()</code>]] when there is the
+
<dd><p>当在被调用函数内的任何地方可能需要中断时,从 [[#bdb.Bdb.dispatch_call|dispatch_call()]] 调用此方法。</p></dd></dl>
possibility that a break might be necessary anywhere inside the called
 
function.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>user_line</code><span class="sig-paren">(</span>''<span class="n">frame</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">user_line</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">frame</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>This method is called from [[#bdb.Bdb.dispatch_line|<code>dispatch_line()</code>]] when either
+
<dd><p>[[#bdb.Bdb.stop_here|stop_here()]] [[#bdb.Bdb.break_here|break_here()]] 产生 <code>True</code> 时,从 [[#bdb.Bdb.dispatch_line|dispatch_line()]] 调用此方法。</p></dd></dl>
[[#bdb.Bdb.stop_here|<code>stop_here()</code>]] or [[#bdb.Bdb.break_here|<code>break_here()</code>]] yields <code>True</code>.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>user_return</code><span class="sig-paren">(</span>''<span class="n">frame</span>'', ''<span class="n">return_value</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">user_return</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">frame</span></span>'', ''<span class="n"><span class="pre">return_value</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>This method is called from [[#bdb.Bdb.dispatch_return|<code>dispatch_return()</code>]] when [[#bdb.Bdb.stop_here|<code>stop_here()</code>]]
+
<dd><p>[[#bdb.Bdb.stop_here|stop_here()]] 产生 <code>True</code> 时,从 [[#bdb.Bdb.dispatch_return|dispatch_return()]] 调用此方法。</p></dd></dl>
yields <code>True</code>.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>user_exception</code><span class="sig-paren">(</span>''<span class="n">frame</span>'', ''<span class="n">exc_info</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">user_exception</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">frame</span></span>'', ''<span class="n"><span class="pre">exc_info</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>This method is called from [[#bdb.Bdb.dispatch_exception|<code>dispatch_exception()</code>]] when
+
<dd><p>[[#bdb.Bdb.stop_here|stop_here()]] 产生 <code>True</code> 时,从 [[#bdb.Bdb.dispatch_exception|dispatch_exception()]] 调用此方法。</p></dd></dl>
[[#bdb.Bdb.stop_here|<code>stop_here()</code>]] yields <code>True</code>.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>do_clear</code><span class="sig-paren">(</span>''<span class="n">arg</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">do_clear</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">arg</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Handle how a breakpoint must be removed when it is a temporary one.</p>
+
<dd><p>处理当断点是临时断点时必须如何删除它。</p>
<p>This method must be implemented by derived classes.</p></dd></dl>
+
<p>此方法必须由派生类实现。</p></dd></dl>
  
<p>Derived classes and clients can call the following methods to affect the
+
<p>派生类和客户端可以调用以下方法来影响步进状态。</p>
stepping state.</p>
 
 
<dl>
 
<dl>
<dt><code>set_step</code><span class="sig-paren">(</span><span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">set_step</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span></dt>
<dd><p>Stop after one line of code.</p></dd></dl>
+
<dd><p>一行代码后停止。</p></dd></dl>
  
 
<dl>
 
<dl>
<dt><code>set_next</code><span class="sig-paren">(</span>''<span class="n">frame</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">set_next</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">frame</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Stop on the next line in or below the given frame.</p></dd></dl>
+
<dd><p>停在给定帧中或下方的下一行。</p></dd></dl>
  
 
<dl>
 
<dl>
<dt><code>set_return</code><span class="sig-paren">(</span>''<span class="n">frame</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">set_return</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">frame</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Stop when returning from the given frame.</p></dd></dl>
+
<dd><p>从给定帧返回时停止。</p></dd></dl>
  
 
<dl>
 
<dl>
<dt><code>set_until</code><span class="sig-paren">(</span>''<span class="n">frame</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">set_until</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">frame</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Stop when the line with the line no greater than the current one is
+
<dd><p>当到达不大于当前行的行或从当前帧返回时停止。</p></dd></dl>
reached or when returning from current frame.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>set_trace</code><span class="sig-paren">(</span><span class="optional">[</span>''frame''<span class="optional">]</span><span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">set_trace</span></span><span class="sig-paren">(</span><span class="optional">[</span>''<span class="pre">frame</span>''<span class="optional">]</span><span class="sig-paren">)</span></dt>
<dd><p>Start debugging from ''frame''. If ''frame'' is not specified, debugging
+
<dd><p>''''开始调试。 如果未指定 ''frame'',则调试从调用者的帧开始。</p></dd></dl>
starts from caller's frame.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>set_continue</code><span class="sig-paren">(</span><span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">set_continue</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span></dt>
<dd><p>Stop only at breakpoints or when finished. If there are no breakpoints,
+
<dd><p>仅在断点处或完成时停止。 如果没有断点,将系统跟踪功能设置为<code>None</code></p></dd></dl>
set the system trace function to <code>None</code>.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>set_quit</code><span class="sig-paren">(</span><span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">set_quit</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span></dt>
<dd><p>Set the <code>quitting</code> attribute to <code>True</code>. This raises [[#bdb.BdbQuit|<code>BdbQuit</code>]] in
+
<dd><p><code>quitting</code> 属性设置为 <code>True</code>。 这会在下一次调用 <code>dispatch_*()</code> 方法之一时引发 [[#bdb.BdbQuit|BdbQuit]]。</p></dd></dl>
the next call to one of the <code>dispatch_*()</code> methods.</p></dd></dl>
 
  
<p>Derived classes and clients can call the following methods to manipulate
+
<p>派生类和客户端可以调用以下方法来操作断点。 如果出现问题,这些方法将返回一个包含错误消息的字符串,如果一切正常,则返回 <code>None</code></p>
breakpoints. These methods return a string containing an error message if
 
something went wrong, or <code>None</code> if all is well.</p>
 
 
<dl>
 
<dl>
<dt><code>set_break</code><span class="sig-paren">(</span>''filename'', ''lineno'', ''temporary=0'', ''cond'', ''funcname''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">set_break</span></span><span class="sig-paren">(</span>''<span class="pre">filename</span>'', ''<span class="pre">lineno</span>'', ''<span class="pre">temporary=0</span>'', ''<span class="pre">cond</span>'', ''<span class="pre">funcname</span>''<span class="sig-paren">)</span></dt>
<dd><p>Set a new breakpoint. If the ''lineno'' line doesn't exist for the
+
<dd><p>设置一个新的断点。 如果作为参数传递的 ''filename'' 不存在 ''lineno'' 行,则返回错误消息。 ''文件名'' 应采用规范形式,如 [[#bdb.Bdb.canonic|canonic()]] 方法中所述。</p></dd></dl>
''filename'' passed as argument, return an error message. The ''filename''
 
should be in canonical form, as described in the [[#bdb.Bdb.canonic|<code>canonic()</code>]] method.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>clear_break</code><span class="sig-paren">(</span>''<span class="n">filename</span>'', ''<span class="n">lineno</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">clear_break</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">filename</span></span>'', ''<span class="n"><span class="pre">lineno</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Delete the breakpoints in ''filename'' and ''lineno''. If none were set, an
+
<dd><p>删除 ''filename'' ''lineno'' 中的断点。 如果没有设置,则返回错误消息。</p></dd></dl>
error message is returned.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>clear_bpbynumber</code><span class="sig-paren">(</span>''<span class="n">arg</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">clear_bpbynumber</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">arg</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Delete the breakpoint which has the index ''arg'' in the
+
<dd><p>删除<code>Breakpoint.bpbynumber</code>中索引为''arg''的断点。 如果 ''arg'' 不是数字或超出范围,则返回错误消息。</p></dd></dl>
<code>Breakpoint.bpbynumber</code>. If ''arg'' is not numeric or out of range,
 
return an error message.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>clear_all_file_breaks</code><span class="sig-paren">(</span>''<span class="n">filename</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">clear_all_file_breaks</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">filename</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Delete all breakpoints in ''filename''. If none were set, an error message
+
<dd><p>删除 ''filename'' 中的所有断点。 如果没有设置,则返回错误消息。</p></dd></dl>
is returned.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>clear_all_breaks</code><span class="sig-paren">(</span><span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">clear_all_breaks</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span></dt>
<dd><p>Delete all existing breakpoints.</p></dd></dl>
+
<dd><p>删除所有现有断点。</p></dd></dl>
  
 
<dl>
 
<dl>
<dt><code>get_bpbynumber</code><span class="sig-paren">(</span>''<span class="n">arg</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">get_bpbynumber</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">arg</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Return a breakpoint specified by the given number. If ''arg'' is a string,
+
<dd><p>返回由给定数字指定的断点。 如果 ''arg'' 是一个字符串,它将被转换为一个数字。 如果 ''arg'' 是非数字字符串,如果给定的断点从未存在或已被删除,则会引发 [[../exceptions#ValueError|ValueError]]</p>
it will be converted to a number. If ''arg'' is a non-numeric string, if
 
the given breakpoint never existed or has been deleted, a
 
[[../exceptions#ValueError|<code>ValueError</code>]] is raised.</p>
 
 
<div class="versionadded">
 
<div class="versionadded">
  
<p><span class="versionmodified added">3.2 新版功能.</span></p>
+
<p><span class="versionmodified added">3.2 版中的新功能。</span></p>
  
 
</div></dd></dl>
 
</div></dd></dl>
  
 
<dl>
 
<dl>
<dt><code>get_break</code><span class="sig-paren">(</span>''<span class="n">filename</span>'', ''<span class="n">lineno</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">get_break</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">filename</span></span>'', ''<span class="n"><span class="pre">lineno</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Check if there is a breakpoint for ''lineno'' of ''filename''.</p></dd></dl>
+
<dd><p>检查 ''filename'' ''lineno'' 是否有断点。</p></dd></dl>
  
 
<dl>
 
<dl>
<dt><code>get_breaks</code><span class="sig-paren">(</span>''<span class="n">filename</span>'', ''<span class="n">lineno</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">get_breaks</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">filename</span></span>'', ''<span class="n"><span class="pre">lineno</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Return all breakpoints for ''lineno'' in ''filename'', or an empty list if
+
<dd><p>返回 ''filename'' ''lineno'' 的所有断点,如果没有设置,则返回空列表。</p></dd></dl>
none are set.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>get_file_breaks</code><span class="sig-paren">(</span>''<span class="n">filename</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">get_file_breaks</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">filename</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Return all breakpoints in ''filename'', or an empty list if none are set.</p></dd></dl>
+
<dd><p>返回 ''filename'' 中的所有断点,如果没有设置,则返回空列表。</p></dd></dl>
  
 
<dl>
 
<dl>
<dt><code>get_all_breaks</code><span class="sig-paren">(</span><span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">get_all_breaks</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span></dt>
<dd><p>Return all breakpoints that are set.</p></dd></dl>
+
<dd><p>返回所有设置的断点。</p></dd></dl>
  
<p>Derived classes and clients can call the following methods to get a data
+
<p>派生类和客户端可以调用以下方法来获取表示堆栈跟踪的数据结构。</p>
structure representing a stack trace.</p>
 
 
<dl>
 
<dl>
<dt><code>get_stack</code><span class="sig-paren">(</span>''<span class="n">f</span>'', ''<span class="n">t</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">get_stack</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">f</span></span>'', ''<span class="n"><span class="pre">t</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Get a list of records for a frame and all higher (calling) and lower
+
<dd><p>获取帧和所有更高(调用)和更低帧的记录列表,以及更高部分的大小。</p></dd></dl>
frames, and the size of the higher part.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>format_stack_entry</code><span class="sig-paren">(</span>''<span class="n">frame_lineno</span>'', ''<span class="n">lprefix</span><span class="o">=</span><span class="default_value">': '</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">format_stack_entry</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">frame_lineno</span></span>'', ''<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>''<span class="sig-paren">)</span></dt>
<dd><p>Return a string with information about a stack entry, identified by a
+
<dd><p>返回一个包含堆栈条目信息的字符串,由 <code>(frame, lineno)</code> 元组标识:</p>
<code>(frame, lineno)</code> tuple:</p>
 
 
<ul>
 
<ul>
<li><p>The canonical form of the filename which contains the frame.</p></li>
+
<li><p>包含框架的文件名的规范形式。</p></li>
<li><p>The function name, or <code>&quot;&lt;lambda&gt;&quot;</code>.</p></li>
+
<li><p>函数名称,或 <code>&quot;&lt;lambda&gt;&quot;</code></p></li>
<li><p>The input arguments.</p></li>
+
<li><p>输入参数。</p></li>
<li><p>The return value.</p></li>
+
<li><p>返回值。</p></li>
<li><p>The line of code (if it exists).</p></li></ul>
+
<li><p>代码行(如果存在)。</p></li></ul>
 
</dd></dl>
 
</dd></dl>
  
<p>The following two methods can be called by clients to use a debugger to debug
+
<p>客户端可以调用以下两种方法来使用调试器来调试以字符串形式给出的 [[../../glossary#term-statement|语句]] </p>
a [[../../glossary#term-statement|<span class="xref std std-term">statement</span>]], given as a string.</p>
 
 
<dl>
 
<dl>
<dt><code>run</code><span class="sig-paren">(</span>''<span class="n">cmd</span>'', ''<span class="n">globals</span><span class="o">=</span><span class="default_value">None</span>'', ''<span class="n">locals</span><span class="o">=</span><span class="default_value">None</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">run</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">cmd</span></span>'', ''<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>'', ''<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>''<span class="sig-paren">)</span></dt>
<dd><p>Debug a statement executed via the [[../functions#exec|<code>exec()</code>]] function. ''globals''
+
<dd><p>调试通过 [[../functions#exec|exec()]] 函数执行的语句。 ''globals'' 默认为 <code>__main__.__dict__</code>''locals'' 默认为 ''globals''</p></dd></dl>
defaults to <code>__main__.__dict__</code>, ''locals'' defaults to ''globals''.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>runeval</code><span class="sig-paren">(</span>''<span class="n">expr</span>'', ''<span class="n">globals</span><span class="o">=</span><span class="default_value">None</span>'', ''<span class="n">locals</span><span class="o">=</span><span class="default_value">None</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">runeval</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">expr</span></span>'', ''<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>'', ''<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>''<span class="sig-paren">)</span></dt>
<dd><p>Debug an expression executed via the [[../functions#eval|<code>eval()</code>]] function. ''globals'' and
+
<dd><p>调试通过 [[../functions#eval|eval()]] 函数执行的表达式。 ''globals'' ''locals'' [[#bdb.Bdb.run|run()]] 具有相同的含义。</p></dd></dl>
''locals'' have the same meaning as in [[#bdb.Bdb.run|<code>run()</code>]].</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt><code>runctx</code><span class="sig-paren">(</span>''<span class="n">cmd</span>'', ''<span class="n">globals</span>'', ''<span class="n">locals</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">runctx</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">cmd</span></span>'', ''<span class="n"><span class="pre">globals</span></span>'', ''<span class="n"><span class="pre">locals</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>For backwards compatibility. Calls the [[#bdb.Bdb.run|<code>run()</code>]] method.</p></dd></dl>
+
<dd><p>为了向后兼容。 调用 [[#bdb.Bdb.run|run()]] 方法。</p></dd></dl>
  
 
<dl>
 
<dl>
<dt><code>runcall</code><span class="sig-paren">(</span>''<span class="n">func</span>'', ''<span class="o">/</span>'', ''<span class="o">*</span><span class="n">args</span>'', ''<span class="o">**</span><span class="n">kwds</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-name descname"><span class="pre">runcall</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">func</span></span>'', ''<span class="o"><span class="pre">/</span></span>'', ''<span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span>'', ''<span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwds</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Debug a single function call, and return its result.</p></dd></dl>
+
<dd><p>调试单个函数调用,并返回其结果。</p></dd></dl>
 
</dd></dl>
 
</dd></dl>
  
Finally, the module defines the following functions:
+
最后,该模块定义了以下函数:
  
 
<dl>
 
<dl>
<dt><code>bdb.</code><code>checkfuncname</code><span class="sig-paren">(</span>''<span class="n">b</span>'', ''<span class="n">frame</span>''<span class="sig-paren">)</span></dt>
+
<dt><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>''<span class="n"><span class="pre">b</span></span>'', ''<span class="n"><span class="pre">frame</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Check whether we should break here, depending on the way the breakpoint ''b''
+
<dd><p>根据设置断点 ''b'' 的方式,检查我们是否应该在这里中断。</p>
was set.</p>
+
<p>如果它是通过行号设置的,它会检查 <code>b.line</code> 是否与作为参数传递的帧中的相同。 如果断点是通过函数名设置的,我们必须检查我们是否在正确的框架(正确的函数)中,以及我们是否在它的第一个可执行行中。</p></dd></dl>
<p>If it was set via line number, it checks if <code>b.line</code> is the same as the one
+
 
in the frame also passed as argument. If the breakpoint was set via function
+
; <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>''<span class="n"><span class="pre">file</span></span>'', ''<span class="n"><span class="pre">line</span></span>'', ''<span class="n"><span class="pre">frame</span></span>''<span class="sig-paren">)</span>
name, we have to check we are in the right frame (the right function) and if
+
: 确定在这行代码处是否存在有效(活动)断点。 返回断点的元组和指示是否可以删除临时断点的布尔值。 如果没有匹配的断点,则返回 <code>(None, None)</code>。
we are in its first executable line.</p></dd></dl>
+
 
 +
; <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>
 +
: 使用调用者框架中的 [[#bdb.Bdb|Bdb]] 实例开始调试。
  
; <code>bdb.</code><code>effective</code><span class="sig-paren">(</span>''<span class="n">file</span>'', ''<span class="n">line</span>'', ''<span class="n">frame</span>''<span class="sig-paren">)</span>
 
: Determine if there is an effective (active) breakpoint at this line of code. Return a tuple of the breakpoint and a boolean that indicates if it is ok to delete a temporary breakpoint. Return <code>(None, None)</code> if there is no matching breakpoint.
 
  
; <code>bdb.</code><code>set_trace</code><span class="sig-paren">(</span><span class="sig-paren">)</span>
+
</div>
: Start debugging with a [[#bdb.Bdb|<code>Bdb</code>]] instance from caller's frame.
+
<div class="clearer">
 +
 
  
  
 
</div>
 
</div>
  
[[Category:Python 3.9 中文文档]]
+
[[Category:Python 3.9 文档]]

2021年10月31日 (日) 04:51的最新版本

bdb — 调试器框架

源代码: :source:`Lib/bdb.py`



bdb 模块处理基本的调试器功能,例如设置断点或通过调试器管理执行。

定义了以下异常:

exception bdb.BdbQuit
Bdb 类为退出调试器引发的异常。

bdb 模块还定义了两个类:

class bdb.Breakpoint(self, file, line, temporary=0, cond=None, funcname=None)

此类实现临时断点、忽略计数、禁用和(重新)启用以及条件。

断点通过名为 bpbynumber 的列表按编号进行索引,并通过 (file, line) 对通过 bplist 进行索引。 前者指向类 Breakpoint 的单个实例。 后者指向此类实例的列表,因为每行可能有多个断点。

创建断点时,其关联的文件名应采用规范格式。 如果定义了 funcname,则在执行该函数的第一行时将计算断点命中。 条件断点始终计为命中。

Breakpoint 实例有以下方法:

deleteMe()

从与文件/行关联的列表中删除断点。 如果它是该位置的最后一个断点,它还会删除文件/行的条目。

enable()

将断点标记为已启用。

disable()

将断点标记为禁用。

bpformat()

返回一个包含断点所有信息的字符串,格式很好:

  • 断点编号。

  • 如果是暂时的。

  • 它的文件,行位置。

  • 导致中断的条件。

  • 如果它必须在接下来的 N 次被忽略。

  • 断点命中数。

3.2 版中的新功能。

bpprint(out=None)

bpformat() 的输出打印到文件 out,如果是 None,则打印到标准输出。

class bdb.Bdb(skip=None)

Bdb 类充当通用 Python 调试器基类。

这个类负责跟踪设施的细节; 派生类应该实现用户交互。 标准调试器类 (pdb.Pdb) 就是一个例子。

skip 参数(如果给定)必须是全局样式模块名称模式的可迭代对象。 调试器不会进入源自与这些模式之一匹配的模块的帧。 帧是否被认为源自某个模块由帧全局变量中的 __name__ 决定。

3.1 版新功能: skip 参数。

Bdb 的以下方法通常不需要被覆盖。

canonic(filename)

以规范形式获取文件名的辅助方法,即作为大小写规范化(在不区分大小写的文件系统上)绝对路径,去掉周围的尖括号。

reset()

botframestopframereturnframequitting 属性设置为准备开始调试的值。

trace_dispatch(frame, event, arg)

此功能安装为调试帧的跟踪功能。 它的返回值是新的跟踪函数(在大多数情况下,也就是它自己)。

默认实现决定如何分派帧,具体取决于即将执行的事件类型(作为字符串传递)。 event 可以是以下之一:

  • "line":将要执行新的一行代码。

  • "call":一个函数即将被调用,或者另一个代码块被输入。

  • "return":函数或其他代码块即将返回。

  • "exception":发生异常。

  • "c_call":即将调用AC函数。

  • "c_return":AC 功能已返回。

  • "c_exception":AC 函数引发异常。

对于 Python 事件,会调用专门的函数(见下文)。 对于 C 事件,不采取任何行动。

arg 参数取决于前一个事件。

有关跟踪功能的更多信息,请参阅 sys.settrace() 的文档。 有关代码和框架对象的更多信息,请参阅 标准类型层次结构

dispatch_line(frame)

如果调试器应该在当前行停止,调用 user_line() 方法(应该在子类中覆盖)。 如果设置了 Bdb.quitting 标志(可以从 user_line() 设置),则引发 BdbQuit 异常。 返回对 trace_dispatch() 方法的引用,以便在该范围内进一步跟踪。

dispatch_call(frame, arg)

如果调试器应在此函数调用上停止,请调用 user_call() 方法(应在子类中覆盖)。 如果设置了 Bdb.quitting 标志(可以从 user_call() 设置),则引发 BdbQuit 异常。 返回对 trace_dispatch() 方法的引用,以便在该范围内进一步跟踪。

dispatch_return(frame, arg)

如果调试器应在此函数返回时停止,请调用 user_return() 方法(应在子类中覆盖)。 如果设置了 Bdb.quitting 标志(可以从 user_return() 设置),则引发 BdbQuit 异常。 返回对 trace_dispatch() 方法的引用,以便在该范围内进一步跟踪。

dispatch_exception(frame, arg)

如果调试器应在此异常处停止,则调用 user_exception() 方法(应在子类中覆盖)。 如果设置了 Bdb.quitting 标志(可以从 user_exception() 设置),则引发 BdbQuit 异常。 返回对 trace_dispatch() 方法的引用,以便在该范围内进一步跟踪。

通常派生类不会覆盖以下方法,但如果他们想重新定义停止和断点的定义,它们可能会覆盖。

stop_here(frame)

此方法检查 是否在调用堆栈中的 botframe 以下某处。 botframe 是调试开始的帧。

break_here(frame)

此方法检查文件名和属于 frame 的行中或至少在当前函数中是否存在断点。 如果断点是临时断点,则此方法将其删除。

break_anywhere(frame)

此方法检查当前帧的文件名中是否存在断点。

派生类应该覆盖这些方法以获得对调试器操作的控制。

user_call(frame, argument_list)

当在被调用函数内的任何地方可能需要中断时,从 dispatch_call() 调用此方法。

user_line(frame)

stop_here()break_here() 产生 True 时,从 dispatch_line() 调用此方法。

user_return(frame, return_value)

stop_here() 产生 True 时,从 dispatch_return() 调用此方法。

user_exception(frame, exc_info)

stop_here() 产生 True 时,从 dispatch_exception() 调用此方法。

do_clear(arg)

处理当断点是临时断点时必须如何删除它。

此方法必须由派生类实现。

派生类和客户端可以调用以下方法来影响步进状态。

set_step()

一行代码后停止。

set_next(frame)

停在给定帧中或下方的下一行。

set_return(frame)

从给定帧返回时停止。

set_until(frame)

当到达不大于当前行的行或从当前帧返回时停止。

set_trace([frame])

开始调试。 如果未指定 frame,则调试从调用者的帧开始。

set_continue()

仅在断点处或完成时停止。 如果没有断点,将系统跟踪功能设置为None

set_quit()

quitting 属性设置为 True。 这会在下一次调用 dispatch_*() 方法之一时引发 BdbQuit

派生类和客户端可以调用以下方法来操作断点。 如果出现问题,这些方法将返回一个包含错误消息的字符串,如果一切正常,则返回 None

set_break(filename, lineno, temporary=0, cond, funcname)

设置一个新的断点。 如果作为参数传递的 filename 不存在 lineno 行,则返回错误消息。 文件名 应采用规范形式,如 canonic() 方法中所述。

clear_break(filename, lineno)

删除 filenamelineno 中的断点。 如果没有设置,则返回错误消息。

clear_bpbynumber(arg)

删除Breakpoint.bpbynumber中索引为arg的断点。 如果 arg 不是数字或超出范围,则返回错误消息。

clear_all_file_breaks(filename)

删除 filename 中的所有断点。 如果没有设置,则返回错误消息。

clear_all_breaks()

删除所有现有断点。

get_bpbynumber(arg)

返回由给定数字指定的断点。 如果 arg 是一个字符串,它将被转换为一个数字。 如果 arg 是非数字字符串,如果给定的断点从未存在或已被删除,则会引发 ValueError

3.2 版中的新功能。

get_break(filename, lineno)

检查 filenamelineno 是否有断点。

get_breaks(filename, lineno)

返回 filenamelineno 的所有断点,如果没有设置,则返回空列表。

get_file_breaks(filename)

返回 filename 中的所有断点,如果没有设置,则返回空列表。

get_all_breaks()

返回所有设置的断点。

派生类和客户端可以调用以下方法来获取表示堆栈跟踪的数据结构。

get_stack(f, t)

获取帧和所有更高(调用)和更低帧的记录列表,以及更高部分的大小。

format_stack_entry(frame_lineno, lprefix=': ')

返回一个包含堆栈条目信息的字符串,由 (frame, lineno) 元组标识:

  • 包含框架的文件名的规范形式。

  • 函数名称,或 "<lambda>"

  • 输入参数。

  • 返回值。

  • 代码行(如果存在)。

客户端可以调用以下两种方法来使用调试器来调试以字符串形式给出的 语句

run(cmd, globals=None, locals=None)

调试通过 exec() 函数执行的语句。 globals 默认为 __main__.__dict__locals 默认为 globals

runeval(expr, globals=None, locals=None)

调试通过 eval() 函数执行的表达式。 globalslocalsrun() 具有相同的含义。

runctx(cmd, globals, locals)

为了向后兼容。 调用 run() 方法。

runcall(func, /, *args, **kwds)

调试单个函数调用,并返回其结果。

最后,该模块定义了以下函数:

bdb.checkfuncname(b, frame)

根据设置断点 b 的方式,检查我们是否应该在这里中断。

如果它是通过行号设置的,它会检查 b.line 是否与作为参数传递的帧中的相同。 如果断点是通过函数名设置的,我们必须检查我们是否在正确的框架(正确的函数)中,以及我们是否在它的第一个可执行行中。

bdb.effective(file, line, frame)
确定在这行代码处是否存在有效(活动)断点。 返回断点的元组和指示是否可以删除临时断点的布尔值。 如果没有匹配的断点,则返回 (None, None)
bdb.set_trace()
使用调用者框架中的 Bdb 实例开始调试。