本来只知道可以用pycharm,eclipse这类东西打断点。今天同事告诉我才知道原来python本身也有工具pdb,这个名字应该来自c语言的gdb吧=。=
使用很简单,import pdb
即可,在需要开始断点的地方加上 pdb.set_trace()
即可。
调试中命令
b 打断点,常用于循环,这样下次循环可以在此处停住
c 继续执行直到下一个断点
l 查看当前代码段
s 进入函数
r 一直执行直到从进入的函数跳出
q 终止
n 执行下一行
pp 打印变量值
使用见下面一块log
wujingcideMacBook-Pro:my wujingci$ python test.py
> /Users/wujingci/PycharmProjects/my/test.py(8)<module>()
-> a[0] = a[0] + i
(Pdb) l
3 def add(num,base):
4 result = num + base
5 return result
6 for i in range(10):
7 pdb.set_trace()
8 -> a[0] = a[0] + i
9 a[1] = add(a[1],i*1024)
10 a[2] = add(a[2],2048*i)
11 a[3] = a[3] + i*4096
12
[EOF]
(Pdb) n
> /Users/wujingci/PycharmProjects/my/test.py(9)<module>()
-> a[1] = add(a[1],i*1024)
(Pdb) pp a
[1, 2, 3, 4]
(Pdb) b
(Pdb) c
> /Users/wujingci/PycharmProjects/my/test.py(7)<module>()
-> pdb.set_trace()
(Pdb) c
> /Users/wujingci/PycharmProjects/my/test.py(8)<module>()
-> a[0] = a[0] + i
(Pdb) l
3 def add(num,base):
4 result = num + base
5 return result
6 for i in range(10):
7 pdb.set_trace()
8 -> a[0] = a[0] + i
9 a[1] = add(a[1],i*1024)
10 a[2] = add(a[2],2048*i)
11 a[3] = a[3] + i*4096
12
[EOF]
(Pdb) pp a
[2, 1026, 2051, 4100]
(Pdb) n
> /Users/wujingci/PycharmProjects/my/test.py(9)<module>()
-> a[1] = add(a[1],i*1024)
(Pdb) l
4 result = num + base
5 return result
6 for i in range(10):
7 pdb.set_trace()
8 a[0] = a[0] + i
9 -> a[1] = add(a[1],i*1024)
10 a[2] = add(a[2],2048*i)
11 a[3] = a[3] + i*4096
12
[EOF]
(Pdb) s
--Call--
> /Users/wujingci/PycharmProjects/my/test.py(3)add()
-> def add(num,base):
(Pdb) l
1 import pdb
2 a = [1,2,3,4]
3 -> def add(num,base):
4 result = num + base
5 return result
6 for i in range(10):
7 pdb.set_trace()
8 a[0] = a[0] + i
9 a[1] = add(a[1],i*1024)
10 a[2] = add(a[2],2048*i)
11 a[3] = a[3] + i*4096
(Pdb) n
> /Users/wujingci/PycharmProjects/my/test.py(4)add()
-> result = num + base
(Pdb) r
--Return--
> /Users/wujingci/PycharmProjects/my/test.py(5)add()->3074
-> return result
(Pdb) l
1 import pdb
2 a = [1,2,3,4]
3 def add(num,base):
4 result = num + base
5 -> return result
6 for i in range(10):
7 pdb.set_trace()
8 a[0] = a[0] + i
9 a[1] = add(a[1],i*1024)
10 a[2] = add(a[2],2048*i)
11 a[3] = a[3] + i*4096
(Pdb) q
Traceback (most recent call last):
File "test.py", line 9, in <module>
a[1] = add(a[1],i*1024)
File "test.py", line 5, in add
return result
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/bdb.py", line 53, in trace_dispatch
return self.dispatch_return(frame, arg)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/bdb.py", line 91, in dispatch_return
if self.quitting: raise BdbQuit
bdb.BdbQuit