官方文档 : https://docs.python.org/3/library/pdb.html#debugger-commands
介绍
pdb是Python自带的库,是Python程序的一个交互式源代码调试工具.
使用
在调试器控制下运行:
>>> import pdb
>>> import mymodule
>>> pdb.run('mymodule.test()')
> <string>(0)?()
(Pdb) continue
> <string>(1)?()
(Pdb) continue
NameError: 'spam'
> <string>(1)?()
(Pdb)
将pdb作为脚本来调试其他脚本:
python3 -m pdb myscript.py
运行后,自动进入pdb的命令行模式.
插入在测试代码中
import pdb;
pdb.set_trace()
代码运行时,将在pdb.set_trace()处进入断点调试.
pdb模块的函数
pdb.run(statement, globals=None, locals=None)
statement : 要调试的语句块,以字符串的形式表示
globals: 可选参数,设置statement运行的全局环境变量
locals: 可选参数,设置statement运行的局部环境变量
示例 :
>>> import pdb # 导入调试模块
>>> pdb.run(''''' # 调用run()函数执行一个for循环
for i in range(3):
i *= 3
print(i)
''')
> <string>(2)<module>()
(Pdb) n # (Pdb)为调试命令提示符,表示可输入调试命令
> <string>(3)<module>()
(Pdb) n # n(next)表示执行下一行
> <string>(4)<module>()
(Pdb) print(i) # 打印变量i的值
0
(Pdb) continue # 继续运行程序
0
3
6
runeval(expression, globals=None, locals=None)
expression: 要调试的表达式
globals: 可选参数,设置expression运行的全局环境变量
locals: 可选参数,设置expression运行的局部环境变量
import pdb
a = "aaa"
pdb.set_trace()
b = "bbb"
c = "ccc"
pdb.runeval('a+b')
final = a + b + c
print final
运行结果 :
-> b = "bbb"
(Pdb) c
> <string>(1)<module>()
(Pdb) n
--Return--
> <string>(1)<module>()->'aaabbb'
(Pdb) c
aaabbbccc
runcall( * args, ** kwds)
function: 函数名
args(kwds): 函数的参数
import pdb
a = 3
b = 4
c = 5
def sum(a,b):
return a+b
result = pdb.runcall(sum,a,b)
print result
final = a + b + c
pdb.set_trace()
print final
运行结果 :
-> return a+b
(Pdb) c
7
> g:\users\username\pycharmprojects\test_unittest\for_tests.py(36)<module>()
-> print final
(Pdb) c
12
pdb.set_trace()
在插入这个语句的代码处开始进入硬断点.
调试命令行
常用断点调试命令 :
完整命令 | 简写命令 | 描述 |
---|---|---|
args | a | 打印当前函数的参数 |
break | b | 设置断点 |
clear | cl | 清除断点 |
condition | 无 | 设置条件断点 |
continue | c | 继续运行,直到遇到断点或者脚本结束 |
disable | 无 | 禁用断点 |
enable | 无 | 启用断点 |
help | h | 查看pdb帮助 |
ignore | 无 | 忽略断点 |
jump | j | 跳转到指定行数运行 |
list | l | 列出脚本清单 |
next | n | 执行下条语句,遇到函数不进入其内部 |
p | 打印变量值 | |
quit | q | 退出pdb |
return | r | 一直运行到函数返回 |
tbreak | 无 | 设置临时断点、断点只中断一次 |
step | s | 执行下一条语句,遇到函数进入其内部 |
where | w | 查看所在的位置 |
! | 无 | 在pdb中执行语句 |
运行过程中,单步运行时,输入上面的命令/简写命令,按Enter键执行描述的功能.