在jupyter中使用python pdb调试代码
目前在jupyter中还没有可视化调试界面,而python pdb是代码调试的一个不错的选择,它支持设置断点和单步调试,使用起来非常方便
pdb常用命令
参数 | 说明 | 实例 |
---|---|---|
h |
help 帮助文档 | h b : 查看 b 命令的文档 |
b |
break 打断点 | b :查看所有断点 b 5 : 给第5行打断点 b function_name :当前文件名为 function_name 的函数打断点b test1.A.add :在 import test1 文件的 A 类的 add 方法打断点 b A.add :在 A 类的 add 方法打断点 |
tbreak |
设置临时断点,运行完毕后会删除这个断点 | 设置方法和 b 一样 |
w |
where 查看当前执行的位置 | w |
cl |
clear 清除断点 | cl :清除所有断点 cl 2 :清除断点列表中编号为2断点 cl test.py:18 :清除 test.py 文件编号为18断点 cl test1:18 :清除 import test1 文件编号为18的断点 |
condition |
给断点设置条件 | condition 1 i==4 :当断点列表中编号为1的断点中变量 i 等于 4 的时候执行断点 |
s |
step 执行下一条命令,遇到函数则进入 | 参考下面执行效果 |
n |
next 执行下一条语句,遇到函数不进入 | 参考下面执行效果 |
c |
continue 继续执行,直到遇到下一条断点 | 参考下面执行效果 |
r |
return 执行当前运行函数到结束 | 参考下面执行效果 |
args |
args 打印当前函数的所有参数及参数值 | 参考下面执行效果 |
p |
print 打印出当前所在函数中的变量或表达式结果 | p a :打印变量a p dir(a) :打印变量a所有属性 |
pp |
格式化打印出来的结果 | pp a :格式化打印变量a |
run |
重新执行 | |
q |
quit 退出pdb调试 |
pdb进阶阶命令
参数 | 说明 | 实例 |
---|---|---|
l |
list 列出当前或范围周围代码 | l 5, 20 : 列出5到20行代码 l : 查看当前位置的代码 |
disable |
停用断点 | disable :清除所有断点 disable 2 :清除断点列表中编号为2断点 disable test.py:18 :清除 test.py 文件编号为18断点 disable test1:18 :清除 import test1 文件编号为18的断点 |
enable |
启动断点 | 用法和disable 一样 |
ignore bpnumber |
忽略某个断点几次 | ignore 1 3 :忽略断点列表中第1个断点3次,一般循环中用, |
commands |
给断点写一个脚本执行 | commands 1 :给断点编号为1的的断点写脚本 |
unt |
until 执行到下一行 | 参考下面 unt 执行效果 |
j |
jump 跳转至指定程序行,如果是前行,则忽略中间行代码。 如果是后退,状态重设为回退行状态 |
注意:是跳转到不是执行 |
alias |
自定义一个函数,参数可由%1,%2来表示。 类似 Python 的 lambda |
|
unalias |
删掉别名函数 | unalias name |
实例1
代码如下:
1 | import pdb |
使用condition
给编号为6的断点设置条件为i==3
给第8行设置断点,然后输入n单步执行(遇到函数不进入):
给第8行设置断点,但函数位置输入s遇到函数进入,然后输入r,直接执行到函数尾部:
输入args
打印当前函数的所有参数及参数值,注意:只有在函数内部该命令才有效
使用commands 22
为编号为22的断点编写脚本
使用unt
命令执行到下一行
示例2
代码如下:
1 | import pdb |
输入p dir(a)
打印a的所有属性:
输入l
列出当前位置的代码