本文討論在沒有方便的ide工具可用的情況下,使用pdb除錯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的入賬所需的稅收。
如何除錯?
1.加入斷點
在需要插入斷點的地方,加入紅色部分**:如果_debug值為true,則在該處開始除錯(加入_debug的原因是為了方便開啟/關閉除錯)。
#!/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.開始執行除錯
執行程式./debug_demo.py,得到
> /usr/local/qspace/user_network/debug_demo.py(7)debug_demo()
-> if val <= 1600 :
(pdb)
-> val <= 1600 : 指示當前執行的語句,(pdb)等待你的除錯指令. pdb的指令很豐富,輸入h指令可以檢視指令的使用方法。下面簡單介紹常用指令:
檢視**上下文,l(小寫l)
(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)
左邊是行號,右邊是**正文。
監視變數:p 變數名
(pdb) p val
4500
(pdb)
單步執行: n
-> 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
加入斷點:b 行號
(pdb) b 14
執行到斷點: c
(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
執行到函式返回前: r
(pdb) r
level 3
195.0
--return--
> /****()
->none
-> print (val - 3500) * 0.10 + (3500-1600) * 0.05
(pdb)
說明:
pdb還有很多其他很多有用的指令,讀者可以自行探索。輸入h,h 命令。就可以得到命令的詳細幫助。
不過,我個人認為一般無需啟動這種除錯方法,一般使用日誌輸出進行除錯即可,除非遇到了非常微妙的錯誤。這時,單步除錯的威力便顯示出來了。
使用PDB除錯Python程式
本文討論在沒有方便的ide工具可用的情況下,使用pdb除錯python程式 原始碼例子 例如,有模擬稅收計算的程式 usr bin python def debug demo val if val 1600 print level 1 print 0 elif val 3500 print leve...
使用PDB除錯Python程式
本文討論在沒有方便的ide工具可用的情況下,使用pdb除錯python程式 原始碼例子 例如,有模擬稅收計算的程式 usr bin python def debug demo val if val 1600 print level 1 print 0 elif val 3500 print leve...
使用PDB除錯Python程式
本文討論在沒有方便的ide工具可用的情況下,使用pdb除錯python程式 原始碼例子 例如,有模擬稅收計算的程式 usr bin python def debug demo val if val 1600 print level 1 print 0 elif val 3500 print leve...