使用pdb调试python程序
我觉得,为了能在没有IDE的情况下也能顺利完成开发任务,是应该学习学习使用GDB这种命令式的单步调试程序工具,这对于习惯使用IDE的我们来说可能有些困难。
也没有啦,下面就是自己学习使用pdb调试python程序的记录。
示例程序 test.py
#encoding:utf-8
def compare(a, b):
if a > b:
print a
else:
print b
return cmp(a,b)
if __name__ == '__main__':
import pdb
pdb.set_trace()
a = 1
b = 2
c = compare(a, b)
print c
程序里面加入下面 pdb. set_trace() 就可以开始单步调试程序了。程序从下面一条开始调试。
运行程序 python test.py
会出现上面的样子,应该是类似于GDB(没用过)的调试方式吧,->指向的表示当前要运行的代码,下面的(Pdb)后面就可以输入PDB相应的调试命令。下面的表格给出了常会的几个命令和说明:
命令 |
说明及示例 |
n(ext) | 运行该语句,到下一条语句 |
l(ist) | 列出当前代码段 |
p(rint) | 打印指定变量的值,如p a表示打印a 的值 |
c(ontinue) | 运行到下一个断点,如果没有则运行到最后 |
s(tep) | 运行进入函数 |
r(eturn) | 从当前函数返回 |
b(reak) | 设置断点,如break 15 表示在第15行设置断点 |
q,exit | 终止调试,退出程序 |
! | 设置变量的值,如:!a = "alex he"设置变量a的值为"alex he",如果a不存在则可不用前缀!直接用a = "hesz" |
h(help) | 帮助命令,可以直接使用help s 查看s命令的说明 |
下面是实例调试过程输出
d:\temp\python>python test.py
> d:\temp\python\test.py(13)<module>()
-> a = 1
(Pdb) n
> d:\temp\python\test.py(14)<module>()
-> b = 2
(Pdb) l
9
10 if __name__ == '__main__':
11 import pdb
12 pdb.set_trace()
13 a = 1
14 -> b = 2
15 c = compare(a, b)
16 print c
[EOF]
(Pdb) b 15
Breakpoint 1 at d:\temp\python\test.py
(Pdb) n
> d:\temp\python\test.py(15)<module>()
-> c = compare(a, b)
(Pdb) s
--Call--
> d:\temp\python\test.py(3)compare()
-> def compare(a, b):
(Pdb) n
> d:\temp\python\test.py(4)compare()
-> if a > b:
(Pdb) l
1 #encoding:utf-8
2
3 def compare(a, b):
4 -> if a > b:
5 print a
6 else:
7 print b
8 return cmp(a,b)
9
10 if __name__ == '__main__':
11 import pdb
(Pdb) p a
1
(Pdb) p b
2
(Pdb) n
> d:\temp\python\test.py(7)compare()
-> print b
(Pdb) !a = 10
(Pdb) !b = 20
(Pdb) n
20
> d:\temp\python\test.py(8)compare()
-> return cmp(a,b)
(Pdb) l
3 def compare(a, b):
4 if a > b:
5 print a
6 else:
7 print b
8 -> return cmp(a,b)
9
10 if __name__ == '__main__':
11 import pdb
12 pdb.set_trace()
13 a = 1
(Pdb) c
-1