溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python如何使用pdb調(diào)試代碼

發(fā)布時間:2020-07-29 09:46:13 來源:億速云 閱讀:216 作者:小豬 欄目:開發(fā)技術(shù)

這篇文章主要講解了Python如何使用pdb調(diào)試代碼,內(nèi)容清晰明了,對此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會有幫助。

Python如何使用pdb調(diào)試代碼

什么是pdb

不知道大家在用Python寫代碼出現(xiàn)報錯時是怎樣調(diào)試的,從報錯提示定位回去一步一步check每一行?如果沒有IDE或者命令行寫代碼時又該怎樣快速調(diào)試?這時如果使用pdb進行調(diào)試將會異常方便。

Pdb就是Python debugger,是python自帶的調(diào)試器。通過 pdb 我們可以交互式的查看運行過程中變量的值、設(shè)置斷點、逐行執(zhí)行代碼、查看代碼的調(diào)用棧等等。并且如果環(huán)境沒有 GUI 的話,那么 pdb 能夠助你更快速的調(diào)試代碼。

首先我們準備一段有問題的代碼用于示例

def test(p):
  p = p + 1
  
  return p

def fastdebug():
  print('start')
  temp = 'ready' 
  print('ok')
  res = test(temp) 
  print('end')
  
fastdebug()

這段代碼很簡單,當我們執(zhí)行fastdebug()時,會執(zhí)行fastdebug函數(shù)并在該函數(shù)中調(diào)用另一個函數(shù)test(),test函數(shù)接收一個參數(shù)p并計算p+1的值傳出。很明顯,在高亮的一句代碼中傳進去的參數(shù)temp是str,所以當我們執(zhí)行上面一段代碼時一定會報錯

Python如何使用pdb調(diào)試代碼

現(xiàn)在讓我們假裝不知道問題出在哪,使用pdb來調(diào)試這段代碼。

使用pdb

由于pdb是python標準庫因此我們可以直接import 使用

import pdb

接著在我們需要調(diào)試的代碼段前設(shè)一個斷點

pdb.set_trace()

應(yīng)用到我們的代碼:point_down:

Python如何使用pdb調(diào)試代碼

可以看到運行代碼后,pdb的調(diào)試器控制臺將從放置set_trace()的位置開始等待我們的命令,并且箭頭標記指向pdb接下來要運行的行。那么接下來介紹一些pdb中常用命令

使用n來執(zhí)行下一行

可以看到此時調(diào)試器指向

print('start')

在彈出的文本框中輸入n即可執(zhí)行該行,并且箭頭將指向下一行即將執(zhí)行的代碼

Python如何使用pdb調(diào)試代碼

使用ENTER重復(fù)上一個命令

現(xiàn)在還沒有到報錯的位置,我們使用n或者直接回車重復(fù)執(zhí)行上一個命令

Python如何使用pdb調(diào)試代碼

使用p打印變量值

在Pdb中我們可以使用p + 變量名來查看變量值,比如我們查看變量temp的值

Python如何使用pdb調(diào)試代碼

使用l查看上下行代碼

在Pdb中我們可以使用l查看當前行上下幾行代碼

Python如何使用pdb調(diào)試代碼

使用s進入子函數(shù)

現(xiàn)在,我們來到出錯的這一行,之所以報錯就是傳進去變量出了問題,因此我們可以在pdb交互行中使用s來進入子函數(shù)test()

Python如何使用pdb調(diào)試代碼

使用r執(zhí)行函數(shù)直到結(jié)束

在pdb中可以使用r來執(zhí)行當前運行函數(shù)到結(jié)束

Python如何使用pdb調(diào)試代碼

使用c停止調(diào)試并繼續(xù)運行

現(xiàn)在我們修改相關(guān)代碼完成調(diào)試,可以使用c命令繼續(xù)執(zhí)行命令

Python如何使用pdb調(diào)試代碼

當然也可以輸入q直接退出調(diào)試界面

看完上述內(nèi)容,是不是對Python如何使用pdb調(diào)試代碼有進一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI