Python PDB调试
简介
在开发简单程序时,可以通过加入Print()或者log的方式进行辅助程序调试,但是对于复杂的程序这种调试方式往往比较困难,因此需要一种可以单步调试以及可以方便查看变量的方法来进行程序问题的排查。在Linux发行版中使用vim写过C/C++并且使用gdb进行调试的人可能对于上手pdb调试机会更加容易一些,当然其他人也可以很快上手Python的pdb调试。
基本命令
完整命令 | 简写命令 | 描述 |
---|---|---|
args | a | 打印当前函数的参数 |
break | b | 设置断点 |
clear | cl | 清除断点 |
condition | 无 | 设置条件断点 |
continue | c或者cont | 继续运行,知道遇到断点或者脚本结束 |
disable | 无 | 禁用断点 |
enable | 无 | 启用断点 |
help | h | 查看pdb帮助 |
ignore | 无 | 忽略断点 |
jump | j | 跳转到指定行数运行 |
list | l | 列出脚本清单 |
next | n | 执行下条语句,遇到函数不进入其内部 |
p | p | 打印变量值,也可以用print |
quit | q | 退出 pdb |
return | r | 一直运行到函数返回 |
tbreak | 无 | 设置临时断点,断点只中断一次 |
step | s | 执行下一条语句,遇到函数进入其内部 |
where | w | 查看所在的位置 |
! | 无 | 在pdb中执行语句 |
调试例子
代码一:
utils.py
def add(a, b):
return a + b + b - a
代码二:
import utils
import pdb
def call(a, b):
pdb.set_trace()
c = utils.add(a, b)
print(c)
if __name__ == '__main__':
call(3, 4)
代码很简单在此不过多描述关键点在于:
import pdb
pdb.set_trace() #在终端进行调试,代码遇到这句话会停下来,类似断点功能
调试过程
D:\exercise\pdb>python36 main.py
> d:\exercise\pdb\main.py(6)call()
-> c = utils.add(a, b)
(Pdb) l
1 import utils
2 import pdb
3
4 def call(a, b):
5 pdb.set_trace()
6 -> c = utils.add(a, b)
7 print(c)
8
9 if __name__ == '__main__':
10 call(3, 4)
[EOF]
在bash中调用call函数,首先会停留在pdb所设置的断点的下一行,等待接下来用户的输入此时输入n会进行单步调试执行下一行
(Pdb) n
> d:\exercise\pdb\main.py(7)call()
-> print(c)
若想看此时的变量情况,可以使用p打印出某个变量的值
(Pdb) n
> d:\exercise\pdb\main.py(7)call()
-> print(c)(Pdb) p c
7
中途退出函数只需在bash中输入q便可退出程序
(Pdb) q
Traceback (most recent call last):
File "main.py", line 10, in <module>
call(3, 4)
File "main.py", line 7, in call
print(c)
File "main.py", line 7, in call
print(c)
File "C:\Program Files\Python36\lib\bdb.py", line 51, in trace_dispatch
return self.dispatch_line(frame)
File "C:\Program Files\Python36\lib\bdb.py", line 70, in dispatch_line
if self.quitting: raise BdbQuit
bdb.BdbQuit
基本过程如上所述,更多知识仍需各位亲自去探索,路漫漫其修远兮!