pdb
作者:解琛
时间:2020 年 8 月 20 日
- pdb
- 一、进入 pdb
- 二、基本指令
- 2.1 h (help)
- 2.2 w (where)
- 2.3 d (down)
- 2.4 u (up)
- 2.5 b (break)
- 2.6 tbreak (temporary break)
- 2.7 cl (clear)
- 2.8 disable
- 2.9 enable
- 2.10 s (step)
- 2.11 n (next)
- 2.12 r (return)
- 2.13 c (continue)
- 2.14 l (list)
- 2.15 a (args)
- 2.16 p expression (print)
- 2.17 pp expression
- 2.18 run
- 2.19 q (quit)
- 2.20 j lineno (jump)
- 2.21 unt (until)
- 2.22 condition bpnumber conditon
- 2.23 Enter
- 2.24 无效指令
- 三、断点调试
一、进入 pdb
python -m pdb client.py
二、基本指令
2.1 h (help)
帮助。
2.2 w (where)
打印当前执行堆栈。
2.3 d (down)
执行跳转到在当前堆栈的深一层。
2.4 u (up)
行跳转到当前堆栈的上一层。
2.5 b (break)
添加断点。
指令名称 | 说明 |
---|---|
b | 列出当前所有断点,和断点执行到统计次数 |
b line_no | 当前脚本的line_no行添加断点 |
b filename:line_no | 脚本filename的line_no行添加断点 |
b function | 在函数function的第一条可执行语句处添加断点 |
2.6 tbreak (temporary break)
临时断点。
在第一次执行到这个断点之后,就自动删除这个断点,用法和 b 一样。
2.7 cl (clear)
清除断点。
指令名称 | 说明 |
---|---|
cl | 清除所有断点 |
cl bpnumber1 bpnumber2… | 清除断点号为 bpnumber1,bpnumber2… 的断点 |
cl lineno | 清除当前脚本 lineno 行的断点 |
cl filename:line_no | 清除脚本 filename 的 line_no 行的断点 |
2.8 disable
停用断点,参数为bpnumber,和cl的区别是,断点依然存在,只是不启用。
2.9 enable
激活断点,参数为bpnumber。
2.10 s (step)
执行下一条命令。
如果本句是函数调用,则s会执行到函数的第一句。
2.11 n (next)
执行下一条语句。
如果本句是函数调用,则执行函数,接着执行当前执行语句的下一条。
2.12 r (return)
执行当前运行函数到结束。
2.13 c (continue)
继续执行,直到遇到下一条断点。
2.14 l (list)
列出源码。
指令名称 | 说明 |
---|---|
l | 列出当前执行语句周围11条代码 |
l first | 列出first行周围11条代码 |
l first second | 列出first–second范围的代码,如果second<first,second将被解析为行数 |
2.15 a (args)
列出当前执行函数的函数。
2.16 p expression (print)
输出 expression 的值。
2.17 pp expression
好看一点的p expression。
2.18 run
重新启动debug,相当于restart。
2.19 q (quit)
退出 debug。
2.20 j lineno (jump)
设置下条执行的语句函数。
只能在堆栈的最底层跳转,向后重新执行,向前可直接执行到行号。
2.21 unt (until)
执行到下一行(跳出循环),或者当前堆栈结束。
2.22 condition bpnumber conditon
给断点设置条件,当参数condition返回True的时候bpnumber断点有效,否则bpnumber断点无效。
2.23 Enter
直接输入Enter,会执行上一条命令。
2.24 无效指令
输入 PDB 不认识的命令,PDB 会把他当做 Python 语句在当前环境下执行。
三、断点调试
import pdb 之后,直接在代码里需要调试的地方放一个pdb.set_trace(),就可以设置一个断点。
程序会在pdb.set_trace()暂停并进入pdb调试环境,可以用pdb 变量名查看变量,或者c继续运行。
import pdb
if __name__ == "__main__":
print "Hello!"
pdb.set_trace()
命令 | 简写命令 | 作用 |
---|---|---|
break | b | 设置断点 |
continue | c | 继续执行程序,直到下一个断点或调用点 |
list | l | 查看当前行的代码段 |
step | s | 进入函数 |
return | r | 执行代码直到从当前函数返回 |
quit | q | 中止并退出 |
next | n | 执行下一行 |
p | 打印变量的值 | |
help | h | 帮助 |
args | a | 查看传入参数 |
回车 | 重复上一条命令 | 回车 |
break | b | 显示所有断点 |
break lineno | b lineno 在指定行设置断点 | |
break file:lineno | b file:lineno | 在指定文件的行设置断点\ |
clear num | 删除指定断点 |