python调试工具 -- pdb

参考资料

  1. 官方文档
  2. 10分钟教程掌握Python调试器pdb
  3. Python 必备 debug 神器:pdb
  4. PDB——Python调试利器详解

简介

pdb是python的内置模块,类似c++中的gdb的存在,可用于在命令行中对代码进行调试。

进入调试

  1. 修改代码

The typical usage to break into the debugger from a running program is to insert at the location you want to break into the debugger.

在需要调试的位置插入以下代码,运行的时候,会在插入位置停止进入调试模式。

1
2
import pdb
pdb.set_trace()
  1. 脚本执行调试

pdb.py can also be invoked as a script to debug other scripts

1
2
# myscript.py为要调试的程序
python3 -m pdb myscript.py

推荐使用方法2,重要的是不会添加额外的代码污染代码,更加灵活。

常用命令

命令

功能

_断点有关的命令_

b(break)

查看已设的所有断点

b no

设置断点,no是断点所在的行号

b filename:no

将断点添加到某个文件中

b funcname

为函数funcname的第一行设置断点

tbreak(break)

同b,临时断点,执行一次自动清除

tbreak no

tbeak filename:no

tbreak funcname

disable bno

禁用指定序号断点,但未删除

enable bno

启用指定序号断点

cl

清除所有断点(包括临时断点)

cl bno1[bno2 ……]

清除指定序号的断点,多个用空格分隔

cl filename:no

清除某文件所在行号的断点

_调试相关的命令_

s(step)

执行下一句,遇到函数会进入到函数内部执行

n(next)

执行下一句,不会进入函数

r(return)

执行当前所在函数的返回处

c(continue)

执行到下一个断点处

unt(until)

退出当前循环或堆栈,遇到断点会停止

unt no

执行到指定行号处停止

_查看代码或变量值_

l(list)

列出当前执行行周围的11行代码

l no

列出指定行号周围的11行代码

l no1 no2

列出no1 no2间的行号

ll

列出所有代码

p exp

打印某变量或表达式的值

pp exp

好看一点打印某变量或表达式的值

a

查看所在函数的参数与参数值

what is var

查看变量的类型

_其它_

restart

重新运行

run

类似restart

q(quit)

退出调试

interact

启动一个python的交互式解释器,使用当前代码的全局命名空间 ctrl + d退出