目前在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
代码如下:
import pdb
pdb.set_trace()
def mul(a, b,e = 88):
c = a * b
return c
for i in range(10):
a = i
b = i + 1
r = mul(a, b)
print(r)
使用condition
给编号为6的断点设置条件为i==3
给第8行设置断点,然后输入n单步执行(遇到函数不进入):
给第8行设置断点,但函数位置输入s遇到函数进入,然后输入r,直接执行到函数尾部:
输入args
打印当前函数的所有参数及参数值,注意:只有在函数内部该命令才有效
使用commands 22
为编号为22的断点编写脚本
使用unt
命令执行到下一行
示例2
代码如下:
import pdb
pdb.set_trace()
class A():
def __init__(self,value):
self.value = value
def printParam(self):
print(self.value)
v = 3
a = A(v)
a.printParam()
输入p dir(a)
打印a的所有属性:
输入l
列出当前位置的代码