qi09 原文 python程序的調試方法html
本文討論在沒有方便的IDE工具可用的狀況下,使用pdb調試python程序python
例如,有模擬稅收計算的程序:函數
#!/usr/bin/python def debug_demo(val): if val <= 1600 : print "level 1" print 0 elif val <= 3500 : print "level 2" print (val - 1600) * 0.05 elif val <= 6500 : print "level 3" print (val - 3500) * 0.10 + (3500-1600) * 0.05 else: print "level 4" print (val - 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05 #~def debug_demo if __name__ == "__main__": debug_demo(4500)
debug_demo函數計算4500的入帳所需的稅收。工具
如何調試?post
在須要插入斷點的地方,加入紅色部分代碼:若是_DEBUG值爲True,則在該處開始調試(加入_DEBUG的緣由是爲了方便打開/關閉調試)。url
#!/usr/bin/python
_DEBUG=True
def debug_demo(val):
if _DEBUG == True:
import pdb
pdb.set_trace()
if val <= 1600 :
print "level 1"
print 0
elif val <= 3500 :
print "level 2"
print (val - 1600) * 0.05
elif val <= 6500 :
print "level 3"
print (val - 3500) * 0.10 + (3500-1600) * 0.05
else:
print "level 4"
print (val - 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05
#~def debug_demo
if __name__ == "__main__":
debug_demo(4500)spa
運行程序./debug_demo.py,獲得debug
> /usr/local/qspace/user_network/debug_demo.py(7)debug_demo()
-> if val <= 1600 :
(Pdb)調試
-> val <= 1600 : 指示當前執行的語句,(Pdb)等待你的調試指令. pdb的指令很豐富,輸入h指令能夠查看指令的使用方法。日誌
下面簡單介紹經常使用指令:
(Pdb) l
2 _DEBUG=True
3 def debug_demo(val):
4 if _DEBUG == True:
5 import pdb
6 pdb.set_trace()
7 -> if val <= 1600 :
8 print "level 1"
9 print 0
10 elif val <= 3500 :
11 print "level 2"
12 print (val - 1600) * 0.05
(Pdb)
左邊是行號,右邊是代碼正文。
(Pdb) p val
4500
(Pdb)
-> elif val <= 3500 :
(Pdb) l
5 import pdb
6 pdb.set_trace()
7 if val <= 1600 :
8 print "level 1"
9 print 0
10 -> elif val <= 3500 :
11 print "level 2"
12 print (val - 1600) * 0.05
13 elif val <= 6500 :
14 print "level 3"
15 print (val - 3500) * 0.10 + (3500-1600) * 0.05
(Pdb) b 14
(Pdb) c
> /*****
-> print "level 3"
(Pdb) l
9 print 0
10 elif val <= 3500 :
11 print "level 2"
12 print (val - 1600) * 0.05
13 elif val <= 6500 :
14 B-> print "level 3"
15 print (val - 3500) * 0.10 + (3500-1600) * 0.05
16 else:
17 print "level 4"
18 print (val - 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05
19
(Pdb) r
level 3
195.0
--Return--
> /****()
->None
-> print (val - 3500) * 0.10 + (3500-1600) * 0.05
(Pdb)
pdb還有不少其餘不少有用的指令,讀者能夠自行探索。輸入h,h 命令。就能夠獲得命令的詳細幫助。
不過,我我的認爲通常無需啓動這種調試方法,通常使用日誌輸出進行調試便可,除非遇到了很是微妙的錯誤。這時,單步調試的威力便顯示出來了