[轉] python程序的調試方法

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

1.加入斷點

在須要插入斷點的地方,加入紅色部分代碼:若是_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

 

2.開始運行調試

  運行程序./debug_demo.py,獲得debug

> /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 命令。就能夠獲得命令的詳細幫助。

不過,我我的認爲通常無需啓動這種調試方法,通常使用日誌輸出進行調試便可,除非遇到了很是微妙的錯誤。這時,單步調試的威力便顯示出來了

相關文章
相關標籤/搜索