debug with pdb
平常我是习惯使用IDE的断点功能的,但是有些情况下没有办法使用这种方式来进行调试,所以python原生提供的pdb就成为了一种不错的选择。下面我简单介绍一下pdb使用的方式。算是做一个总结,也方便自己以后忘了快速回忆。
breakpoint()
import numpy as np
for i in range(3):
a = np.random.random((3, 3))
breakpoint()代码会在breakpoint()这里停下,控制台输出如下文字, 可以看到和gdb还是很像的
> ./test.py(3)<module>()
-> for i in range(3):
(Pdb) e开头的路径就是当前的python源代码文件,(3)代表你的程序停在第三行,<module> 就是你当前所在堆栈,要解释的也就这么多了。
基础命令
检视当前程序状态 :
print var (p var):打印var变量where (w): 查看调用栈, 调用栈的顺序是由上至下,可以用up(u)和down(d)自己所处的调用栈的位置list (l): 查看当前位置源代码,默认为前后共计11行,再次使用l命令会向下查看11行, 使用l .可以回到当前行longlist (ll): 查看当前函数全部代码
控制程序运行 :
next(n): 执行下一行step(s): 步入式下一行retval: 拿到当下一步到返回的时候, pdb会提示--Return--,这时候我们可以用这个命令打印一下返回值until(unt) num: 运行直到达到大于等于num行(如果这过程中碰到breakpoint()还是会停下来)return (r):运行到返回为止continue (cont):继续运行下去
pdb特性
In Python3.7, breakpoint() calls set_trace() internally to start the debugger. So just use breakpoint().
可以在debugger里运行任何python命令
break(b) num(function name): pdb内设置断点, 当前文件的第num行停下来quit(q): 退出pdb
进阶命令
b num, condition: 条件断点