使用PDB除錯Python程式

2021-08-25 16:14:21 字數 3242 閱讀 3046

本文討論在沒有方便的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) b14

執行到斷點: 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...