如何用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

ptyhon -m pdb pdb_demo.py

使用这个方式进入调试模式,会在脚本的第一行开始单步调试。

如何用pdb数据库(超详细讲解如何使用)(1)

对于单文件的脚本并没有什么问题,如果是一个大型的项目,项目里有很多的文件,使用这种方式只能大大降低我们的效率。

一般情况下,都会直接在你需要的地方打一个断点,那如何打呢?

只需在你想要打断点的地方加上这两行。

import pdb pdb.set_trace()

然后执行时,也不需要再指定-m pdb了,直接python pdb_demo.py ,就会直接在这个地方暂停。

如何用pdb数据库(超详细讲解如何使用)(2)

如何用pdb数据库(超详细讲解如何使用)(3)

3. 调试指令

熟悉 Pycharm 的人都知道,我们执行下一步,执行到下一个断点是

同样的,pdb 也需要你更多记这样的命令。

当你看到pdb模式的标识符 (Pdb)时,就可以输入这样的命令。

我在这里将这些指令按使用频度分为三个等级。

最常用

指令 英文 解释
n Next 下一步
l list 列出当前断点处源码
p print 打印变量
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并回车,就可以看所有的指令了。

如何用pdb数据库(超详细讲解如何使用)(4)

4. 开始调试

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

如何用pdb数据库(超详细讲解如何使用)(5)

这个调试过程,我加了些注释,你应该能够很轻易地理解这种调试方式。

今天pdb的调试内容大概就是这些,你学会了吗?

看到上面截图的时间了吧?是的,又是一个深夜写的文章。希望对你会有所帮助。

文末福利

本人原创的 《PyCharm 中文指南》一书前段时间一经发布,就火爆了整个 Python 圈,发布仅一天的时间,下载量就突破了 1000 ,并且在当天就在 Github 上就收获了数百的 star,截至目前,下载量已经破万。

这本书一共将近 200 页内含大量的图解制作之精良,值得每个 Python 工程师 人手一份。

如何用pdb数据库(超详细讲解如何使用)(6)

为方便你下载,我将这本书上传到 百度网盘上了,点赞 转发 本篇文章后可自行获取。

链接:https:///s/1-NzATHFtaTV1MQzek70iUQ 密码:mft3

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。