Pycharm 的图形化界面虽然好用,但是在某些场景中,是无法使用的。而 Python 本身已经给我们提供了一个调试神器 -- pdb.
准备文件
在调试之前先将这两个文件准备好(做为演示用),并放在同级目录中。
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-----")
进入调试模式
主要有两种方法
做为脚本调用,方法很简单,就像正常执行python脚本一样,只是多加了-m pdb
ptyhon -m pdb pdb_demo.py
使用这个方式进入调试模式,会在脚本的第一行开始单步调试。

对于单文件的脚本并没有什么问题,如果是一个大型的项目,项目里有很多的文件,使用这种方式只能大大降低我们的效率。
一般情况下,都会直接在你需要的地方打一个断点,那如何打呢?
只需在你想要打断点的地方加上这两行。
import pdb
pdb.set_trace()
然后执行时,也不需要再指定-m pdb了,直接python pdb_demo.py,就会直接在这个地方暂停。


调试指令
熟悉 Pycharm 的人都知道,我们执行下一步,执行到下一个断点是
同样的,pdb 也需要你更多记这样的命令。
当你看到pdb模式的标识符 (Pdb)时,就可以输入这样的命令。
我在这里将这些指令按使用频度分为三个等级。
最常用

有时使用

几乎不用

其上全部是我翻译自官方文档,原文在这里:https://docs.python.org/3/library/pdb.html
其实你大可不必死记这些命令,忘记的时候,只要敲入help并回车,就可以看所有的指令了。

开始调试
这里就几个最常用的指定,来演示一遍。

退出pdb并继续程序
尝试 pdb.set_trace = labmbda:None, 如下所示
```plain text
(Pdb) pdb.set_trace = lambda: None # This replaces the set_trace() function!
(Pdb) continue
No more breaks!
```