【python 笔记】 python pdb 调试技巧

python中有个pdb模块,使python代码也可以像gdb那样进行调试,一般情况下pdb模块可以在代码内直接使用,也可以通过命令行参数的形式添加该模块进行调试(python -m pdb file.py)。在代码中直接使用pdb模块调试时,import pdb模块后,然后在需要调试的代码出添加pdb.set_trace()命令即可,运行程序后,在运行到次代码处会自动停止,进入调试模式。

一般常用的调试命令有如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
q  退出debug
h  打印可用的调试命令
b  设置断点,b 5 在第五行设置断点
h command  打印 command 的命令含义
disable codenum  使某一行断点失效
enable codenum   使某一行的断点有效
condition codenum xxx  针对断点设置条件
c    继续执行程序,直到下一个断点
n    执行下一行代码,如果当前语句有函数调用,则不会进入函数体中
s    执行下一行代码,但是s会进入函数
w    打印当前执行点的位置
j    codenum  让程序跳转到指定的行
l    列出附近的源码
p    打印一个参数的值
a    打印当前函数及参数的值
回车  重复执行上一行

测试代码如下sum.py:

?
1
2
3
4
5
6
7
8
9
10
#/usr/bin/python
 
def add_t( ):
     i=1
     sum =0
     for i in range(1,5):
         sum = sum +i
         print sum
if __name__ == '__main__' :
     add_t()

调试过程如下:python -m pdb sum.py

n调试

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1 > / opt / sum .py( 3 )<module>()
  2 - > def add_t( ):
  3 (Pdb) n
  4 > / opt / sum .py( 9 )<module>()
  5 - > if __name__ = = '__main__' :
  6 (Pdb) n
  7 > / opt / sum .py( 10 )<module>()
  8 - > add_t()
  9 (Pdb) n
10 1
11 3
12 6
13 10
14 - - Return - -
15 > / opt / sum .py( 10 )<module>() - > None
16 - > add_t()
17 (Pdb) q

    n表示执行下一行代码,但是不陷入函数内部,可以看第3、6、9行,在执行add_t函数时并未陷入函数内部。

s调试

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
1 > / opt / sum .py( 3 )<module>()
  2 - > def add_t( ):
  3 (Pdb) s
  4 > / opt / sum .py( 9 )<module>()
  5 - > if __name__ = = '__main__' :
  6 (Pdb) s
  7 > / opt / sum .py( 10 )<module>()
  8 - > add_t()
  9 (Pdb) s
10 - - Call - -
11 > / opt / sum .py( 3 )add_t()
12 - > def add_t( ):
13 (Pdb) s
14 > / opt / sum .py( 4 )add_t()
15 - > i = 1
16 (Pdb) s
17 > / opt / sum .py( 5 )add_t()
18 - > sum = 0
19 (Pdb) s
20 > / opt / sum .py( 6 )add_t()
21 - > for i in range ( 1 , 5 ):
22 (Pdb) s
23 > / opt / sum .py( 7 )add_t()
24 - > sum = sum + i
25 (Pdb) s
26 > / opt / sum .py( 8 )add_t()
27 - > print sum
28 (Pdb) p i
29 1
30 (Pdb) p sum
31 1
32 (Pdb) s
33 1
34 > / opt / sum .py( 6 )add_t()
35 - > for i in range ( 1 , 5 ):
36 (Pdb) s
37 > / opt / sum .py( 7 )add_t()
38 - > sum = sum + i
39 (Pdb) s
40 > / opt / sum .py( 8 )add_t()
41 - > print sum
42 (Pdb) p i
43 2
44 (Pdb) p sum
45 3
46 (Pdb)

    s调试和n调试一样,只不过s在遇到函数时会进入函数进行调试,9、12、13表示进入add_t函数内部进行调试,后面使用p命令打印相关函数内参数的值,后面输入r即可退出函数内部的调试。


参考:http://docs.python.org/2/library/pdb.html


转自China_OS的博客http://my.oschina.net/guol/blog/121862

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值