pdb

python pdb的使用

pdb(python debugger)是python自带的代码调试工具,代码调试的核心点就是在特定的位置暂停程序的同时可以直观的观察当前变量的情况,那么pdb最基本的使用就应该从设置断点暂停程序开始。

基本用法

源码中设置断点

pdb允许直接在程序的源码中设定断点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# function A
def bar(x: int):
if x % 2 == 0:
return True
else:
return False

# function B
def foo(a: int, b: int):
# 添加断点
breakpoint()
c = a + b
if bar(c):
return c
else:
return c + 1

# run
foo(3, 4)

通过在foo函数中的代码中添加breakpoint(),pdb会得知断点所在位置,此时当执行该python脚本时会自动在断电位置暂停。

1
2
3
> /Users/someone/tmp/pdb_test.py(12)foo()
-> c = a + b
(Pdb)

第一行会告知使用者所暂停的位置为12行,也就是breakpoint()的下一行。下方会显示正要执行的代码,最下方(Pdb)处则是命令执行行,可以通过命令控制pdb。

输入l将会显示接下来12行的代码,利用p + 变量的形式可以查看对应变量当前的数值。同样也可以通过help命令来查看所使用的指令的帮助信息。

目前程序处于暂停状态,我们可以通过输入n来让程序向下一步运行,当代码中存在另一层调用时,使用n会直接执行到当前代码的下一步,如果需要进入被调用的函数中查询情况,可以是用s来进入,也就是step。

使用q命令可以退出Pdb

直接运行Pdb

除了在源码中直接写入breakpoint()来设定断点外,我们还可以在不修改源代码的前提下直接运行pdb。

1
python -m pdb demo.py

此时需要注意的是这里相当于调用第三方库pdb,那么就与python命令所对应的版本息息相关,如果所处环境存在多个python版本尤其是python2和python3同时存在的情况下,需要根据目标脚本(demo.py)所对应的版本来酌情执行。

执行命令后会直接进入Pdb模式,这时程序会从第一行就开始暂停,执行命令还是一致。


pdb
http://example.com/2023/11/29/pdb/
Author
John Doe
Posted on
November 29, 2023
Licensed under