Python pdb

来源:互联网 发布:淘宝上传营业执照步骤 编辑:程序博客网 时间:2024/06/05 08:27

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 在第五行设置断点
hcommand 打印command的命令含义
disable codenum  使某一行断点失效
enablecodenum   使某一行的断点有效
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
    fori inrange(1,5):
        sum=sum+i
        printsum
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->defadd_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
101
113
126
1310
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->defadd_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->defadd_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->fori inrange(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->printsum
28(Pdb) p i
291
30(Pdb) p sum
311
32(Pdb) s
331
34> /opt/sum.py(6)add_t()
35->fori inrange(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->printsum
42(Pdb) p i
432
44(Pdb) p sum
453
46(Pdb)

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

0 0
原创粉丝点击