Fork me on GitHub

python3调试(debug)--pdb

得之坦然,失之淡然,顺其自然,争其必然

pdb调试

pdb命令清单

忘记了方便查询

两种使用调试器的方法

可以这样启动调试:

  • python -m pdb filename.py
  • import pdb;pdb.set_trace()

下面的演示中使用的是第一种,实际中大多数会选择后者

示例一

1
2
3
4
5
6
7
8
9
10
def fib(n):
if n <= 2:
return 1
return fib(n - 1) + fib(n - 2)

def main():
print(fib(10))

if __name__ == '__main__':
main()

在断点上设置命令

1
2
3
4
5
6
(Pdb) b line(需要下断点的行)
(Pdb) commands num(第几个端点)
(com) bt
(com) args
(com) end
(Pdb)

以上几个命令是断点处分别显示回溯栈,参数。bt表示back trace,args表示函数的参数

以下为我自己设置的几个断点:

效果:

也可以不用在命令处设置断点,使用如下方式也可以:

直接使用args会显示当前层的参数,bt会显示栈回溯

u(up)与d(down)

在递归时可以使用u(up),d(down)来回到上一层或下一层栈,如下:

从这个例子学到什么?

从这个例子我们可以学到:

  • 端点可以处可以设置命令
  • args可以显示传递给方法的参数
  • bt可以显示栈回溯
  • c表示继续直达断点
  • u和d可以回到上一层或者下一层栈

示例二

1
2
3
4
5
6
7
8
9
10
11
12
def pointless_loop(n):

number_sum = 0
# 这是一个无意义的循环
for i in range(1, n + 1):
number_sum += 1

def main():
pointless_loop(30)

if __name__ == '__main__':
main()

n(next)和s(step)的区别



可以看出n表示执行下一行代码,但是不会进入函数,而s会执行并进入函数

为断点设置条件

如下图是我设置的断点条件

为断点设置暂时条件(就是说断点在使用一次之后就会被删除)

如下图:

禁用断点

如下图:

使用display显示旧值与当前值

如下图:

从这个示例中学到什么?

  • next和step可以一步一步执行代码(注意next与step的区别)
  • 断点可以有条件
  • 可以禁用断点
  • 使用display显示当前值与旧值

参考链接

-------------本文结束感谢您的阅读-------------

本文标题:python3调试(debug)--pdb

文章作者:Longofo

发布时间:2018年05月09日 - 23:05

最后更新:2018年05月10日 - 16:05

原始链接:http://longofo.cc/python3调试(debug)--pdb.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

请我吃包辣条也好啊!!!
分享到: