bdb
---调试器框架¶
源代码: Lib/bdb.py
这个 bdb
模块处理基本的调试器功能,如设置断点或通过调试器管理执行。
定义了以下异常:
这个 bdb
模块还定义了两个类:
- class bdb.Breakpoint(self, file, line, temporary=0, cond=None, funcname=None)¶
此类实现临时断点、忽略计数、禁用和(重新)启用以及条件。
断点通过一个名为
bpbynumber
并且通过(file, line)
成对通过bplist
. 前者指向类的单个实例Breakpoint
. 后者指向此类实例的列表,因为每行可能有多个断点。创建断点时,其关联的文件名应为规范格式。如果A 函数名 如果定义了,则在执行该函数的第一行时将计算断点命中。条件断点总是计算命中次数。
Breakpoint
实例具有以下方法:- deleteMe()¶
从与文件/行关联的列表中删除断点。如果它是该位置上的最后一个断点,它还将删除文件/行的条目。
- enable()¶
将断点标记为已启用。
- disable()¶
将断点标记为禁用。
- bpformat()¶
返回一个字符串,其中包含有关断点的所有信息,格式良好:
断点编号。
是否是临时的。
它的文件,行位置。
导致中断的情况。
如果必须在接下来的n次中忽略它。
断点命中计数。
3.2 新版功能.
- bpprint(out=None)¶
打印的输出
bpformat()
文件 out ,或者如果是None
,到标准输出。
- class bdb.Bdb(skip=None)¶
这个
Bdb
类充当通用的Python调试器基类。这个类负责跟踪工具的细节;派生类应该实现用户交互。标准调试器类 (
pdb.Pdb
)就是一个例子。这个 skip 参数(如果给定)必须是全局样式模块名称模式的iterable。调试器不会单步进入源自与这些模式之一匹配的模块的帧中。帧是否被视为源自某个模块,由
__name__
在帧全局中。3.1 新版功能: 这个 skip 参数。
以下方法
Bdb
通常不需要重写。- canonic(filename)¶
以规范形式获取文件名的辅助方法,即,作为大小写规范化(在不区分大小写的文件系统上)的绝对路径,去掉周围的尖括号。
- reset()¶
设置
botframe
,stopframe
,returnframe
和quitting
具有值的属性已准备好开始调试。
- trace_dispatch(frame, event, arg)¶
此函数作为调试帧的跟踪函数安装。它的返回值是新的跟踪函数(在大多数情况下,就是它本身)。
默认实现根据即将执行的事件类型(作为字符串传递)决定如何分派帧。 事件 可以是以下之一:
"line"
:将执行新的代码行。"call"
:一个函数即将被调用,或输入另一个代码块。"return"
:函数或其他代码块即将返回。"exception"
:发生异常。"c_call"
:即将调用C函数。"c_return"
:C函数已返回。"c_exception"
:C函数引发了异常。
对于python事件,调用专门的函数(见下文)。对于C事件,不采取任何措施。
这个 arg 参数取决于上一个事件。
参见文档
sys.settrace()
有关跟踪函数的详细信息。有关代码和框架对象的详细信息,请参阅 标准类型层次结构 .
- dispatch_line(frame)¶
如果调试器应在当前行上停止,则调用
user_line()
方法(应在子类中重写)。举起一个BdbQuit
例外情况,如果Bdb.quitting
设置标志(可从user_line()
)返回对trace_dispatch()
在该范围内进一步跟踪的方法。
- dispatch_call(frame, arg)¶
如果调试器应在此函数调用上停止,请调用
user_call()
方法(应在子类中重写)。举起一个BdbQuit
例外情况,如果Bdb.quitting
设置标志(可从user_call()
)返回对trace_dispatch()
在该范围内进一步跟踪的方法。
- dispatch_return(frame, arg)¶
如果调试器应在此函数返回时停止,则调用
user_return()
方法(应在子类中重写)。举起一个BdbQuit
例外情况,如果Bdb.quitting
设置标志(可从user_return()
)返回对trace_dispatch()
在该范围内进一步跟踪的方法。
- dispatch_exception(frame, arg)¶
如果调试器应在此异常处停止,则调用
user_exception()
方法(应在子类中重写)。举起一个BdbQuit
例外情况,如果Bdb.quitting
设置标志(可从user_exception()
)返回对trace_dispatch()
在该范围内进一步跟踪的方法。
通常,派生类不会重写以下方法,但如果它们想要重新定义停止和断点的定义,则可能会重写这些方法。
- stop_here(frame)¶
此方法检查 框架 在下面的某个地方
botframe
在调用堆栈中。botframe
是调试开始的帧。
- break_here(frame)¶
此方法检查文件名和属于的行中是否存在断点 框架 或者,至少在当前函数中。如果断点是临时断点,则此方法将删除它。
- break_anywhere(frame)¶
此方法检查当前帧的文件名中是否存在断点。
派生类应该重写这些方法以获得对调试器操作的控制。
- user_call(frame, argument_list)¶
此方法是从
dispatch_call()
当被调用函数内的任何地方可能需要中断时。
- user_line(frame)¶
此方法是从
dispatch_line()
当任一stop_here()
或break_here()
产量True
.
- user_return(frame, return_value)¶
此方法是从
dispatch_return()
什么时候?stop_here()
产量True
.
- user_exception(frame, exc_info)¶
此方法是从
dispatch_exception()
什么时候?stop_here()
产量True
.
- do_clear(arg)¶
处理当断点是临时断点时必须如何删除它。
此方法必须由派生类实现。
派生类和客户端可以调用以下方法来影响单步执行状态。
- set_step()¶
在一行代码后停止。
- set_next(frame)¶
停在给定帧内或其下方的下一行。
- set_return(frame)¶
从给定帧返回时停止。
- set_until(frame)¶
当到达不大于当前行的行或从当前帧返回时停止。
- set_trace([frame])¶
从开始调试 框架 . 如果 框架 未指定,调试从调用方的帧开始。
- set_continue()¶
仅在断点处或完成时停止。如果没有断点,请将系统跟踪函数设置为
None
.
派生类和客户端可以调用以下方法来操作断点。如果发生错误,这些方法返回包含错误消息的字符串,或者
None
如果一切都好的话。- set_break(filename, lineno, temporary=0, cond, funcname)¶
设置新断点。如果 林诺 行不存在 filename 作为参数传递,返回错误消息。这个 filename 应采用规范形式,如
canonic()
方法。
- clear_break(filename, lineno)¶
删除中的断点 filename 和 林诺 . 如果未设置,则返回错误消息。
- clear_bpbynumber(arg)¶
删除具有索引的断点 arg 在
Breakpoint.bpbynumber
. 如果 arg 不是数字或超出范围,返回错误消息。
- clear_all_file_breaks(filename)¶
删除中的所有断点 filename . 如果未设置,则返回错误消息。
- clear_all_breaks()¶
删除所有现有断点。
- get_bpbynumber(arg)¶
返回由给定数字指定的断点。如果 arg 是字符串,它将转换为数字。如果 arg 是非数字字符串,如果给定断点从未存在或已被删除,则为
ValueError
提高了。3.2 新版功能.
- get_break(filename, lineno)¶
检查是否存在断点 林诺 属于 filename .
- get_breaks(filename, lineno)¶
返回的所有断点 林诺 在里面 filename 或空列表(如果未设置)。
- get_file_breaks(filename)¶
返回中的所有断点 filename 或空列表(如果未设置)。
- get_all_breaks()¶
返回设置的所有断点。
派生类和客户端可以调用以下方法来获取表示堆栈跟踪的数据结构。
- get_stack(f, t)¶
获取一个帧和所有较高(调用)和较低帧的记录列表,以及较高部分的大小。
- format_stack_entry(frame_lineno, lprefix=': ')¶
返回一个字符串,其中包含有关堆栈项的信息,由
(frame, lineno)
元组:包含框架的文件名的规范形式。
函数名,或
"<lambda>"
.输入参数。
返回值。
代码行(如果存在)。
客户端可以调用以下两个方法来使用调试器调试 statement ,作为字符串提供。
- run(cmd, globals=None, locals=None)¶
调试通过
exec()
功能。 globals 默认为__main__.__dict__
, locals 默认为 globals .
- runcall(func, /, *args, **kwds)¶
调试单个函数调用,并返回其结果。
最后,模块定义了以下功能:
- bdb.checkfuncname(b, frame)¶
根据断点的方式,检查是否应在此处中断 b 被设定。
如果是通过行号设置的,它会检查
b.line
与作为参数传递的框架中的相同。如果断点是通过函数名设置的,我们必须检查我们是否在正确的框架(正确的函数)中,以及是否在其第一个可执行行中。
- bdb.effective(file, line, frame)¶
确定此行代码是否存在有效(活动)断点。返回断点的元组和指示是否可以删除临时断点的布尔值。返回
(None, None)
如果没有匹配的断点。