pdb,python debug
python内置模块,java 使用 jdb,c/c++使用gdb,python使用pdb
PDB命令
break
断点,命令简写 b
- b,列出当前所有断点以及执行到断点的次数统计
- b line_no,在当前脚本line_no添加断点
- b filename:line_no,在filename脚本line_no添加断点
- b function,在函数function第一条可执行语句处添加断点
tbreak
temporary breakpoint,临时断点,用法同break,临时断点在被第一次执行到后,会被自动删除
clear
- clear,清除所有断点
- clear num1, mun2, num3,清除序号为num1, mun2, num3的断点
- clear line_no,清除当前脚本line_no处的断点
- clear filename:line_no,清除filename脚本line_no处的断点
disable
禁用断点,disable num1,断点依然存在但是不启用
enable
启用断点,enable num1,启用被禁用的断点
continue
命令简写c,继续执行程序
list
命令简写l,查看当前代码段
step
命令简写s
return
命令简写r
执行代码直到从当前函数返回
quit
命令简写q,退出pdb
next
命令简写n
命令简写p,打印当前变量
help
命令简写h,帮助
args
命令简写a,查看函数传入参数
回车
重复执行上次pdb命令
clear
根据序号删除断点
where
命令简写w,打印当前执行栈
down
命令简写d,执行跳转到当前堆栈的深一层
up
命令简写u,执行跳转到当前堆栈的浅一层
示例
def add(a, b):
print(a + b)
return a + b
def ten_times(f, *args, **kwargs):
for _ in range(10):
f(*args, **kwargs)
if __name__ == '__main__':
ten_times(add, 1, 1)
开启pdb
python -m pdb .\demo.py
break,在test.py文件的2行设置breakpoint(断点)
(Pdb) b demo.py:2
Breakpoint 1 at c:\users\utsc\desktop\py37study\demo.py:2
continue,让程序一直运行到设置的断点
(Pdb) c
> c:\users\utsc\desktop\py37study\demo.py(2)add()
-> print(a + b)
list,查看当前执行的代码段
(Pdb) l
1 def add(a, b):
2 B-> print(a + b)
3 return a + b
4
5
6 def ten_times(f, *args, **kwargs):
7 for _ in range(10):
8 f(*args, **kwargs)
9
10
11 if __name__ == '__main__':
args,查看传入参数
(Pdb) a
a = 1
b = 1
return,执行代码直到从当前函数返回
(Pdb) r
2
--Return--
> c:\users\utsc\desktop\py37study\demo.py(3)add()->2
-> return a + b
step
(Pdb) s
> c:\users\utsc\desktop\py37study\demo.py(7)ten_times()
-> for _ in range(10):
(Pdb) s
> c:\users\utsc\desktop\py37study\demo.py(8)ten_times()
-> f(*args, **kwargs)
(Pdb) s
--Call--
> c:\users\utsc\desktop\py37study\demo.py(1)add()
-> def add(a, b):
(Pdb) s
> c:\users\utsc\desktop\py37study\demo.py(2)add()
-> print(a + b)
print,打印变量
(Pdb) p a
1
(Pdb) p 2
2
next,执行下一行代码
(Pdb) n
2
> c:\users\utsc\desktop\py37study\demo.py(3)add()
-> return a + b
回车,执行上次的 debug 指令,此处会再次执行 next
(Pdb)
--Return--
> c:\users\utsc\desktop\py37study\demo.py(3)add()->2
-> return a + b
break,显示所有断点
(Pdb) b
Num Type Disp Enb Where
1 breakpoint keep yes at c:\users\utsc\desktop\py37study\demo.py:2
breakpoint already hit 1 time
clear,根据序号删除指定断点
(Pdb) clear 1
Deleted breakpoint 1 at c:\users\utsc\desktop\py37study\demo.py:2
quit,退出debug
(Pdb) quit
PDB 库
代码显式设置断点
import pdb
def test():
pdb.set_trace()
return "test"
print(test())