介绍
pdb(Python Debuger) 是 Python 自带的一个调试工具,它可以帮助我们快速地定位 Python 代码中的问题并且提供了丰富的调试功能,如设置断点、单步执行、查看变量值、修改变量值等。pdb支持在Python的交互式环境中运行也可以在代码中直接嵌入使用。
使用方法
1. 启用pdb
启用 pdb 的方法有两种:一是在 Python 脚本中嵌入 pdb,二是在 Python 脚本执行时带上参数 -m pdb。
第一种方法的实现很简单,只需要在脚本的需要调试的位置使用 pdb.set_trace()
就可以了。当脚本执行到这个位置的时候,就会自动启动 pdb 调试器,可以在此处查看变量及其值,并且修改执行路径。
import pdb
def foo(arg):
pdb.set_trace()
return arg
foo(123)
第二种方法需要在终端中执行脚本,并在命令行参数中带上 -m pdb:
python -m pdb script.py
2. pdb 命令
pdb 调试器提供了丰富的命令,可以通过 help 命令查看所有可用的命令。
常用的 pdb 命令如下:
help: 显示所有可用的命令
next: 执行下一条语句(不会进入函数内部)
step: 执行下一条语句(会进入函数内部)
continue: 继续执行到下一个断点或程序结束
break: 设置断点(参数是行号或函数名)
list: 显示当前行所在的代码段 (可以通过 l 命令缩写)
print: 查看变量的值
watch: 监视变量,一旦发现变量值改变,就打印出来
where: 显示当前执行堆栈
return: 提前从函数中返回
disable: 禁用某个断点
enable: 启用某个断点
clear: 删除某个断点
quit: 退出 pdb
3. 示例
这里我们使用一段经典的快速排序算法代码来演示如何使用 pdb 进行调试:
def quicksort(arr):
if len(arr) <= 1:
return arr
else:
pivot = arr[0]
less = [x for x in arr[1:] if x <= pivot]
greater = [x for x in arr[1:] if x > pivot]
return quicksort(less) + [pivot] + quicksort(greater)
print(quicksort([3,6,8,10,1,2,1]))
我们可以在 quicksort 函数的第一行添加 pdb 的启动命令:
import pdb
def quicksort(arr):
pdb.set_trace()
if len(arr) <= 1:
return arr
else:
pivot = arr[0]
less = [x for x in arr[1:] if x <= pivot]
greater = [x for x in arr[1:] if x > pivot]
return quicksort(less) + [pivot] + quicksort(greater)
print(quicksort([3,6,8,10,1,2,1]))
然后在终端中执行脚本:
python script.py
执行后即可进入 pdb 调试器。我们按照如下步骤进行调试:
输入「n」命令并回车,执行下一行代码的同时跳过了 quicksort 函数内部的代码。
输入「l」命令并回车,查看当前所在代码段的完整内容。
输入「args」命令并回车,查看 arr 变量的值。
输入「s」命令并回车,执行下一行代码并进入 less 变量的赋值语句。
输入「args」命令并回车,再次查看 arr 变量的值,可以发现其已经被 less 变量的影响而改变了。
输入「c」命令并回车,继续执行直到程序结束。
4. 总结
通过本文,我们可以学习到如何在 Python 3.x 中使用 pdb 模块进行代码调试。在实际工作和学习中,发现程序出错时可以先使用pdb调试进行问题定位优化会是一个非常好的选择,对于需要网站性能分析也需要pdb的帮助。