利用PDB實現(xiàn)Python程序調(diào)試
對于大多數(shù)的程序員來說,掌握兩款以上的編程語言應(yīng)用方法是他們必要的職業(yè)技能。那么在這其中,Python就是其中一個選擇比較多的語言。我們在這里可以通過Python程序調(diào)試的相關(guān)方法的解讀,來了解這一語言的應(yīng)用特點。
Python程序調(diào)試源碼例子
例如,有模擬稅收計算的程序:
- #!/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函數(shù)計算4500的入賬所需的稅收。
如何進(jìn)行Python程序調(diào)試?
1.加入斷點
在需要插入斷點的地方,加入紅色部分代碼:如果_DEBUG值為True,則在該處開始調(diào)試(加入_DEBUG的原因是為了方便打開/關(guān)閉調(diào)試)。
- #!/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)
2.開始運行Python程序調(diào)試
運行程序./debug_demo.py,得到
- > /usr/local/qspace/user_network/debug_demo.py(7)debug_demo()
- -> if val <= 1600 :
- (PDB)
-> val <= 1600 : 指示當(dāng)前執(zhí)行的語句,(PDB)等待你的調(diào)試指令. PDB的指令很豐富,輸入h指令可以查看指令的使用方法。下面簡單介紹Python程序調(diào)試常用指令:
查看代碼上下文,l(小寫L)
- (PDB)
- _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
- (PDB)
左邊是行號,右邊是代碼正文。
監(jiān)視變量:p 變量名
- (PDB) p val
- 4500
- (PDB)
單步執(zhí)行: n
- -> elif val <= 3500 :
- (PDB)
- 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
加入斷點:b 行號
- (PDB) b 14
運行到斷點: c
- (PDB) c
- > /*****
- -> print "level 3"
- (PDB)
- print 0
- elif val <= 3500 :
- print "level 2"
- print (val - 1600) * 0.05
- elif val <= 6500 :
- B-> 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
執(zhí)行到函數(shù)返回前: r
- (PDB) r
- level 3
- 195.0
- --Return--
- > /****()
- ->None
- -> print (val - 3500) * 0.10 + (3500-1600) * 0.05
- (PDB)
說明:
PDB還有很多其他很多有用的指令,讀者可以自行探索。輸入h,h 命令。就可以得到命令的詳細(xì)幫助。
不過,我個人認(rèn)為一般無需啟動這種Python程序調(diào)試方法,一般使用日志輸出進(jìn)行調(diào)試即可,除非遇到了非常微妙的錯誤。這時,單步調(diào)試的威力便顯示出來了。
【編輯推薦】