Python使用pdb調(diào)試代碼的技巧
什么是pdb
不知道大家在用Python寫代碼出現(xiàn)報錯時是怎樣調(diào)試的,從報錯提示定位回去一步一步check每一行?如果沒有IDE或者命令行寫代碼時又該怎樣快速調(diào)試?這時如果使用pdb進(jìn)行調(diào)試將會異常方便。
Pdb就是Python debugger,是python自帶的調(diào)試器。通過 pdb 我們可以交互式的查看運(yùn)行過程中變量的值、設(shè)置斷點、逐行執(zhí)行代碼、查看代碼的調(diào)用棧等等。并且如果環(huán)境沒有 GUI 的話,那么 pdb 能夠助你更快速的調(diào)試代碼。
首先我們準(zhǔn)備一段有問題的代碼用于示例
def test(p): p = p + 1 return p def fastdebug(): print('start') temp = 'ready' print('ok') res = test(temp) print('end') fastdebug()
這段代碼很簡單,當(dāng)我們執(zhí)行fastdebug()時,會執(zhí)行fastdebug函數(shù)并在該函數(shù)中調(diào)用另一個函數(shù)test(),test函數(shù)接收一個參數(shù)p并計算p+1的值傳出。很明顯,在高亮的一句代碼中傳進(jìn)去的參數(shù)temp是str,所以當(dāng)我們執(zhí)行上面一段代碼時一定會報錯
現(xiàn)在讓我們假裝不知道問題出在哪,使用pdb來調(diào)試這段代碼。
使用pdb
由于pdb是python標(biāo)準(zhǔn)庫因此我們可以直接import 使用
import pdb
接著在我們需要調(diào)試的代碼段前設(shè)一個斷點
pdb.set_trace()
應(yīng)用到我們的代碼:point_down:
可以看到運(yùn)行代碼后,pdb的調(diào)試器控制臺將從放置set_trace()的位置開始等待我們的命令,并且箭頭標(biāo)記指向pdb接下來要運(yùn)行的行。那么接下來介紹一些pdb中常用命令
使用n來執(zhí)行下一行
可以看到此時調(diào)試器指向
print('start')
在彈出的文本框中輸入n即可執(zhí)行該行,并且箭頭將指向下一行即將執(zhí)行的代碼
使用ENTER重復(fù)上一個命令
現(xiàn)在還沒有到報錯的位置,我們使用n或者直接回車重復(fù)執(zhí)行上一個命令
使用p打印變量值
在Pdb中我們可以使用p + 變量名來查看變量值,比如我們查看變量temp的值
使用l查看上下行代碼
在Pdb中我們可以使用l查看當(dāng)前行上下幾行代碼
使用s進(jìn)入子函數(shù)
現(xiàn)在,我們來到出錯的這一行,之所以報錯就是傳進(jìn)去變量出了問題,因此我們可以在pdb交互行中使用s來進(jìn)入子函數(shù)test()
使用r執(zhí)行函數(shù)直到結(jié)束
在pdb中可以使用r來執(zhí)行當(dāng)前運(yùn)行函數(shù)到結(jié)束
使用c停止調(diào)試并繼續(xù)運(yùn)行
現(xiàn)在我們修改相關(guān)代碼完成調(diào)試,可以使用c命令繼續(xù)執(zhí)行命令
當(dāng)然也可以輸入q直接退出調(diào)試界面
以上就是使用Python標(biāo)準(zhǔn)庫執(zhí)行一次debug過程,可以看到pdb在命令行下調(diào)試代碼是非常出色的,當(dāng)然在某些情況下pdb將不是最好的選擇比如涉及到多線程相關(guān),而在比較大型的項目使用pdb也顯得力不從心,因此我們需要靈活選擇調(diào)試方案,不過至少我們又掌握了一種代碼調(diào)試工具,不是嗎?
相關(guān)文章
Python字符和字符值(ASCII或Unicode碼值)轉(zhuǎn)換方法
這篇文章主要介紹了Python字符和字符值(ASCII或Unicode碼值)轉(zhuǎn)換方法,即把字符串在ASCII值或者Unicode值之間相與轉(zhuǎn)換的方法,需要的朋友可以參考下2015-05-05