The Python Debugger
- Python自带交互式源代码调试器,在代码中设置断点,单步执行。
调试脚本
- 逐句调试
python -m pdb filename.py
方法
.run
- 在调试器控制下执行语句。
.runeval
- 在调试器控件下测试表达式(以字符串形式给出)。当runeval()返回时,它返回表达式的值。否则此功能类似于run()。
.runcall
- 使用给定的参数调用函数
.set_trace()
- 创建一个调试器。
.post_mortem
- 输入给定回溯对象的事后调试。如果没有给出回溯,它将使用当前正在处理的异常之一(如果要使用默认值,则必须处理异常)。
.pm()
- 输入在中找到的回溯的事后调试 sys.last_traceback。
调试器类
- class pdb.Pdb(completekey=‘tab’, stdin=None, stdout=None, skip=None, nosigint=False, readrc=True)
Pdb 是调试器类。详细信息
调试器命令
- h(elp) [command]
获得command的帮助信息。
- w(here)
打印堆栈跟踪,当前堆栈
- d(own)
打印下一个堆栈信息。
- u( p )
打印上一个堆栈信息。
- b(reak) [[filename:]lineno | function[, condition]]
使用lineno参数,在文件中设置中断,执行break。
- tbreak [[filename:]lineno | function[, condition]]
临时断点,在第一次被击中时自动删除。参数与break相同。
- cl(ear) [filename:lineno | bpnumber [bpnumber …]]
使用filename:lineno参数,清除此行的所有断点。
- disable [bpnumber [bpnumber …]]
禁用以空格分隔的断点号列表给出的断点。禁用断点意味着它不能导致程序停止执行,但与清除断点不同,它会保留在断点列表中并可以(重新)启用。
- enable [bpnumber [bpnumber …]]
启用指定的断点。
- ignore bpnumber [count]
设置给定断点号的忽略计数。如果省略count,则忽略计数设置为0.当忽略计数为零时,断点将变为活动状态。当非零时,每次到达断点时计数都会递减,并且断点未被禁用且任何关联条件的计算结果为true。
- condition bpnumber [condition]
Condition是一个表达式,在断点被接受之前必须求值为true。如果条件不存在,则删除任何现有条件; 即,断点是无条件的。
- commands [bpnumber]
指定断点号bpnumber的命令列表。命令本身出现在以下行中。键入仅包含’end’的行以终止命令。
(Pdb) commands 1
(com) print some_variable
(com) end
(Pdb)
- s(tep)
执行当前行,在第一个可能的场合停止(在被调用的函数中或在当前函数的下一行中停止)。
- n(ext)
继续执行,直到达到当前函数中的下一行或返回。
- unt(il)
继续执行,直到达到行号大于当前行的行或从当前帧返回。
- r(eturn)
继续执行,直到当前函数返回。
- c(ont(inue))
继续执行,仅在遇到断点时停止。
- j(ump) lineno
设置将要执行的下一行。
- l(ist) [first[, last]]
列出当前文件的源代码。
- a(rgs)
打印当前函数的参数列表。
- p expression
评估当前上下文中的表达式并打印其值。
- pp expression
与p命令一样,除了表达式的值使用pprint模块进行漂亮打印。
- alias [name [command]]
创建一个名为name的别名来执行命令。
- unalias name
删除指定的别名。
- [!]statement
在当前堆栈帧的上下文中执行(一行)语句。除非语句的第一个单词类似于调试器命令,否则可以省略感叹号。要设置全局变量,可以在赋值命令的global前面加上同一行的命令,例如:
(Pdb) global list_options; list_options = ['-l']
(Pdb)
- run [args …]
重新启动调试的Python程序。
- q(uit)
退出调试器。正在执行的程序被中止。