天天看點

轉] python程式的調試方法源碼例子1.加入斷點2.開始運作調試

本文讨論在沒有友善的IDE工具可用的情況下,使用pdb調試python程式

例如,有模拟稅收計算的程式:

<a></a>

debug_demo函數計算4500的入賬所需的稅收。

如何調試?

在需要插入斷點的地方,加入紅色部分代碼:如果_DEBUG值為True,則在該處開始調試(加入_DEBUG的原因是為了友善打開/關閉調試)。

#!/usr/bin/python 

_DEBUG=True 

def debug_demo(val): 

                if _DEBUG == True: 

                                import pdb 

                                pdb.set_trace() 

                if val &lt;= 1600 : 

                                print "level 1" 

                                print 0 

                elif val &lt;= 3500 : 

                                print "level 2" 

                                print (val - 1600) * 0.05 

                elif val &lt;= 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.py,得到

&gt; /usr/local/qspace/user_network/debug_demo.py(7)debug_demo() 

-&gt; if val &lt;= 1600 : 

(Pdb)

-&gt; val &lt;= 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    -&gt;                 if val &lt;= 1600 : 

    8                                         print "level 1" 

    9                                         print 0 

  10                         elif val &lt;= 3500 : 

  11                                         print "level 2" 

  12                                         print (val - 1600) * 0.05 

(Pdb)   

左邊是行号,右邊是代碼正文。

(Pdb) p val 

4500 

-&gt; elif val &lt;= 3500 : 

(Pdb) l  

  5                                         import pdb  

  6                                         pdb.set_trace()  

  7                         if val &lt;= 1600 :  

  8                                         print "level 1"  

  9                                         print 0 

10    -&gt;                 elif val &lt;= 3500 : 

11                                         print "level 2" 

12                                         print (val - 1600) * 0.05 

13                         elif val &lt;= 6500 : 

14                                         print "level 3" 

15                                         print (val - 3500) * 0.10 + (3500-1600) * 0.05

(Pdb) b 14

(Pdb) c 

&gt; /***** 

-&gt; print "level 3" 

10                         elif val &lt;= 3500 : 

14 B-&gt;                                 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-- 

&gt; /****()

-&gt;None 

-&gt; print (val - 3500) * 0.10 + (3500-1600) * 0.05 

pdb還有很多其他很多有用的指令,讀者可以自行探索。輸入h,h 指令。就可以得到指令的詳細幫助。

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

沒有整理與歸納的知識,一文不值!高度概括與梳理的知識,才是自己真正的知識與技能。 永遠不要讓自己的自由、好奇、充滿創造力的想法被現實的架構所束縛,讓創造力自由成長吧! 多花時間,關心他(她)人,正如别人所關心你的。理想的騰飛與實作,沒有别人的支援與幫助,是萬萬不能的。

    本文轉自wenglabs部落格園部落格,原文連結:http://www.cnblogs.com/arxive/p/5918398.html,如需轉載請自行聯系原作者

上一篇: gdb

繼續閱讀