Python 调试利器: pdb

如何调试 Python 程序?

使用 PyCharm 等 IDE ,我们可以使用它自带的调试工具,具体可以看《 新手入门:PyCharm 的使用 》的 5.4 节。

如果没有安装 IDE,或者不方便使用 IDE ,比如在服务器上运行程序,我们可能会写 print 语句输出变量,但 Python 自带的 Debug 工具比 print 更方便,它就是 pdb

首先附上官方文档 pdb,然后介绍几个常用方法。

1. 引用

作为脚本在命令行调试:

python3 -m pdb myscript.py

作为模块在 Python 文件引用

import pdb
pdb.set_trace() # 写在需要打断点的地方

# 或者

from pdb import set_trace as pause
pause() # 写在需要打断点的地方

如下图所示,当命令行出现 (pdb),说明已经正确打开了 pdb,接下来可以利用 pdb 进行调试了。

不过上面两种方法发区别是:

  • 命令行引入:在第一行命令进入调试模式
  • 文件引入:在第一个断点处进入调试模式

输入 h,可以查看相关命令,接下来介绍几个最常用的命令。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sJdXv6TH-1596868948381)(pdb/pdb1.png)]

2. 变量函数

我们调试往往需要查看变量和函数值:

p expression # 输出 expression 的值,print 的格式
pp expression # 输出 expression 的值,pprint 的格式
whatis expression # 输出 expression 的变量类型

a 或 args # 输出当前函数的参数列表

3. 断点设置

除了在 python 文件中写断点语句,我们还可以设置断点和临时断点,临时断点执行一次后时自动删除

# 添加断点
b
b lineno # lineno 行号
b filename:lineno # filename 文件名 xx.py
b functionname # functionname 函数名

# 添加临时断点
tbreak
tbreak lineno
tbreak filename:lineno
tbreak functionname

# 删除断点
# 不带参数清除所有断点,会提示确认(包括临时断点)
cl 
# 不带参数清除所有断点,会提示确认(包括临时断点)
cl filename:lineno 
cl bpnumber [bpnumber ...] # bpnumber 是断点序号,多个以空格分开

4. 调试

调试功能 PyCharm 也有,但要区分几个命令的区别:

s 或 step # 执行下一行,进入函数体
n 或 next # 执行下一行,不进入函数体

r 或 return # 执行代码直到从当前函数返回
c 或 cont 或 continue # 跳到下一断点

unt(il) lineno # 一直执行到指定行号 lineno 的位置,或遇到断点
j(ump) lineno # 直接执行指定行号 lineno 的语句,会跳过中间的语句

我常用的是 n 和 c

5. 源代码

查看当前代码:

l 或 list # 查看当前行前后 11 行的源代码,当前行用箭头->指明
ll # 查看整个源代码

6. 退出调试

q 或 exit

你可能感兴趣的:(Python)