9.5 【调试技巧】使用 PDB 进行无界面调试¶
Pycharm 的图形化界面虽然好用,但是在某些场景中,是无法使用的。而 Python 本身已经给我们提供了一个调试神器 – pdb,可能你还不知道它,为了讲解这个神器,我写了这篇文章来帮助你轻松的理解它。
1. 准备文件¶
在调试之前先将这两个文件准备好(做为演示用),并放在同级目录中。
utils.py
def sum(mylist):
    result = 0
    for item in mylist:
        result += item
    return result
pdb_demo.py
import utils
def myfunc(mylist):
    result = utils.sum(mylist)
    print(result)
if __name__ == '__main__':
    print("----start----")
    myfunc([1,2,3,4])
    print("----end-----")
2. 进入调试模式¶
主要有两种方法
做为脚本调用,方法很简单,就像正常执行python脚本一样,只是多加了-m pdb
python -m pdb pdb_demo.py
使用这个方式进入调试模式,会在脚本的第一行开始单步调试。
对于单文件的脚本并没有什么问题,如果是一个大型的项目,项目里有很多的文件,使用这种方式只能大大降低我们的效率。
一般情况下,都会直接在你需要的地方打一个断点,那如何打呢?
只需在你想要打断点的地方加上这两行。
import pdb
pdb.set_trace()
然后执行时,也不需要再指定-m pdb了,直接python pdb_demo.py
,就会直接在这个地方暂停。
3. 调试指令¶
熟悉 Pycharm 的人都知道,我们执行下一步,执行到下一个断点是
同样的,pdb 也需要你更多记这样的命令。
当你看到pdb模式的标识符 (Pdb)时,就可以输入这样的命令。
我在这里将这些指令按使用频度分为三个等级。
最常用
指令  | 
英文  | 
解释  | 
|---|---|---|
n  | 
Next  | 
下一步  | 
l  | 
list  | 
列出当前断点处源码  | 
p  | 
打印变量  | 
|
s  | 
step into  | 
执行当前行,可以进入函数  | 
r  | 
return  | 
运行完当前函数,返回结果  | 
c  | 
continue  | 
执行到下一断点或者结束  | 
b  | 
break  | 
设置断点  | 
q  | 
quit  | 
退出程序  | 
有时使用
指令  | 
英文  | 
解释  | 
|---|---|---|
a  | 
args  | 
列出当前函数的参数  | 
pp  | 
pprint  | 
一种可视化更好的打印  | 
j  | 
jump  | 
跳到指定行  | 
cl  | 
clear  | 
清除断点  | 
w  | 
where  | 
打印当前堆栈  | 
u  | 
up  | 
执行跳转到当前堆栈的上一层  | 
unt  | 
until  | 
行数递增执行(忽略循环和函数)  | 
ll  | 
longlist  | 
列出更多的源码  | 
run/restart  | 
run  | 
重新启动 debug(-m pdb)  | 
几乎不用
指令  | 
英文  | 
解释  | 
|---|---|---|
tbreak  | 
temporary break  | 
临时断点  | 
disable  | 
停用断点  | 
|
enable  | 
启用断点  | 
|
alias  | 
设置别名  | 
|
unalias  | 
删除别名  | 
|
whatis  | 
打印对象类型  | 
|
ignore  | 
设置忽略的断点  | 
|
source  | 
列出给定对象的源码  | 
其上全部是我翻译自官方文档,原文在这里:https://docs.python.org/3/library/pdb.html
其实你大可不必死记这些命令,忘记的时候,只要敲入help并回车,就可以看所有的指令了。