pdb-不需要IDE也能調試
阿新 • • 發佈:2017-05-31
int pan trace 進行 command trac 返回 有效 style
python中有個pdb模塊,使python代碼也可以像gdb那樣進行調試,一般情況下pdb模塊可以在代碼內直接使用,也可以通過命令行參數的形式添加該模塊進行調試(python -m pdb file.py)。在代碼中直接使用pdb模塊調試時,import pdb模塊後,然後在需要調試的代碼出添加pdb.set_trace()命令即可,運行程序後,在運行到次代碼處會自動停止,進入調試模式。
一般常用的調試命令有如下:
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 打印當前函數及參數的值
回車 重復執行上一行
其中p 這個命令很關鍵,可以查看參數的值,很好!
測試代碼如下sum.py:
#/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 > /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 > /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即可退出函數內部的調試。
也可以在py文件裏加pdb.set_trace()
例如:
import pdb
def make_bread():
pdb.set_trace()
return "I don‘t have time"
print(make_bread())
pdb-不需要IDE也能調試