python單步除錯方法 pdb

2021-06-30 16:14:24 字數 4413 閱讀 5664

【**:

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

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

python的單步除錯工具pdb

方法一 執行 python m pdb pythonname.py pdb 會自動停在第一行,等待除錯,這時你可以看看 幫助 pdb h 說明下這幾個關鍵 命令 斷點設定 pdb b 10 斷點設定在本py的第10行 或 pdb b ots.py 20 斷點設定到 ots.py第20行 刪除斷點 p...

python單步除錯

執行python m pdb test.py pdb 會自動停在第一行,等待除錯,這時你可以看看幫助 pdb h命令 解釋break 或 b 設定斷點 continue 或 c 繼續執行程式 list 或 l 檢視當前行的 段 step 或 s 進入函式 return 或 r 執行 直到從當前函式返...

wince 單步除錯方法

我找到我的記錄,當時針對我開發板的核心除錯方法,是可以斷點,單步除錯地 1 jtag正常燒寫nboot debuger,eboot兩個檔案 2 裁剪核心時要盡量少的元件,以保證除錯時有足夠的空間 3 去掉紅外元件,在platform.bib 檔案中,把irsir.dll 這個注釋掉即可 要不編譯 核...