使用 Pdb 调试 Python 程序
启动方法( 2 种)
-
侵入式方法(需要在被调试的代码中添加一行代码然后再正常运行代码)
import pdb;pdb.set_trace()
-
非侵入式方法(类似于 gdb ,不用额外修改源代码,在命令行下直接运行就能调试)
python3 -m pdb filename.py
Pdb 命令
查看源代码
- 命令
l
:查看当前位置前后11行源代码(多次会翻页),当前位置在代码中会用–>这个符号标出来; - 命令
ll
:查看当前函数或框架的所有源代码;
添加断点
-
命令
b line_number
:例如b 18
在当前文件的第 $$18$$ 行打断点; -
命令
b filename:line_number
:在filename
文件的第line_number
行打断点; -
命令
b functionname
:在函数functionname
处打断点; -
命令
b
:列出所有中断,包括每个断点、命中该断点的次数、当前的忽略次数以及关联的条件;
清除断点
- 命令
cl
:清除所有断点; - 命令
cl bpnumber [bpnumber ...]
:清除指定行的断点,如有多个,则用空格隔开; - 命令
cl filename:lineno
:清除指定文件的某一行的断点;
打印变量值
- 命令
p expression
:expression
为Python
表达式;
逐行调试命令
- 命令
s
:执行下一行(能够进入函数体); - 命令
n
:执行下一行(不会进入函数体); - 命令
r
:执行下一行(在函数中时会直接执行到函数返回处);
非逐行调试命令
- 命令
c
:持续执行下去,直到遇到一个断点; - 命令
unt lineno
:持续执行直到运行到指定行(或遇到断点); - 命令
j lineno
:直接跳转到指定行(被跳过的代码不执行);
查看函数参数
- 命令
a
:在函数中时打印函数的参数和参数的值;
打印变量类型
- 命令
whatis expression
:打印表达式的类型,常用来打印变量值;
启动交互式解释器
- 命令
interact
:启动一个 python 的交互式解释器,使用当前代码的全局命名空间(使用ctrl+d
返回 pdb );
打印堆栈信息
- 命令
w
:打印堆栈信息,最新的帧在最底部。箭头表示当前帧;
退出pdb
- 命令
q
:退出 pdb 程序;