Alex He

...永远保持希望与激情...约会未来更强大的自己...

 

使用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

image

会出现上面的样子,应该是类似于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

posted on 2012-06-15 15:39  Alex木头  阅读(303)  评论(0编辑  收藏  举报

导航