使用PDB除錯Python程式

2022-07-30 18:21:10 字數 4429 閱讀 5623

本文討論在沒有方便的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 命令。就可以得到命令的詳細幫助。

不過,我個人認為一般無需啟動這種除錯方法,一般使用日誌輸出進行除錯即可,除非遇到了非常微妙的錯誤。這時,單步除錯的威力便顯示出來了。

本文**  (chinaunix)

使用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...