一般習慣了有IDE介面的程式開發環境,現在使用像python這種script language,除了將中途的結果印出來外,還真的一時不知道如何debug。還好,python本身就有提供debug的工具:pdb。
使用pdb有幾種方式[1][3][5],你可以直接在命令列下打:
python -m pdb myscript.py也可以在你的script中,加入下面的程式碼:
import pdb; pdb.set_trace()將pdb.set_trace()放在你想debug的程式碼前,這樣,你的script執行到你置放pdb.set_trace()的地方時就會進入pdb命令列。我已下面的這個簡單script為例:
import pdbx = 'Hello World!'pdb.set_trace()y = 5print x+y我將pdb.set_trace()放在y=5之前,執行後,便會進入pdb命令列:
-> y = 5(Pdb)我們可以看到y=5便是pdb.set_trace()的下一行,而這一行目前尚未執行。這時候我們可以下面幾個命令來進行debug:
q(uit):離開pdbn(ext):下一行c(ont(inue)):繼續s(tep):進入函式r(eturn): 完成函式,返回呼叫函式的地方l(ist) [first[, last]]:列出原始碼並標示出目前所在行數p expression:求取expression的結果!: 改變變數的值當按下n以及Enter後,可以看到程式繼續執行下一行:
(Pdb) n-> print x+y可以用list來看看目前執行到哪一行了:
(Pdb) l 1,10 1 import pdb 2 3 x = 'Hello World!' 4 5 pdb.set_trace() 6 y = 5 7 -> print x+y 8 9 y = '%d' % y 10 print x+y再繼續執行下一行,會出現錯誤訊息:
(Pdb) nTypeError: "cannot concatenate 'str' and 'int' objects"-> print x+y原來str跟int是不能直接相加的,此時,我們便可直接修改y的內容為str進行測試
(Pdb) !y='ok'(Pdb) p x+y'Hello World!ok'這次就沒有error了。
而如果你想要在pdb下也有像IPython那樣的顯示方式時,你可以使用IPython提供的加強版pdb,只要將你的程式原先加入pdb的地方換成IPython.Debugger[2][4]:
from IPython.Debugger import Tracer; debug_here = Tracer()x = 'Hello World!'debug_here()y = 5print x+y參考資料:
[2] IPython Debugger
[3] python debug 入門