1. 程式人生 > 程式設計 >Python使用pdb除錯程式碼的技巧

Python使用pdb除錯程式碼的技巧

Python使用pdb除錯程式碼的技巧

什麼是pdb

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

Pdb就是Python debugger,是python自帶的偵錯程式。通過 pdb 我們可以互動式的檢視執行過程中變數的值、設定斷點、逐行執行程式碼、檢視程式碼的呼叫棧等等。並且如果環境沒有 GUI 的話,那麼 pdb 能夠助你更快速的除錯程式碼。

首先我們準備一段有問題的程式碼用於示例

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

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

這段程式碼很簡單,當我們執行fastdebug()時,會執行fastdebug函式並在該函式中呼叫另一個函式test(),test函式接收一個引數p並計算p+1的值傳出。很明顯,在高亮的一句程式碼中傳進去的引數temp是str,所以當我們執行上面一段程式碼時一定會報錯

Python使用pdb除錯程式碼的技巧

現在讓我們假裝不知道問題出在哪,使用pdb來除錯這段程式碼。

使用pdb

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

import pdb

接著在我們需要除錯的程式碼段前設一個斷點

pdb.set_trace()

應用到我們的程式碼:point_down:

Python使用pdb除錯程式碼的技巧

可以看到執行程式碼後,pdb的偵錯程式控制檯將從放置set_trace()的位置開始等待我們的命令,並且箭頭標記指向pdb接下來要執行的行。那麼接下來介紹一些pdb中常用命令

使用n來執行下一行

可以看到此時偵錯程式指向

print('start')

在彈出的文字框中輸入n即可執行該行,並且箭頭將指向下一行即將執行的程式碼

Python使用pdb除錯程式碼的技巧

使用ENTER重複上一個命令

現在還沒有到報錯的位置,我們使用n或者直接回車重複執行上一個命令

Python使用pdb除錯程式碼的技巧

使用p列印變數值

在Pdb中我們可以使用p + 變數名來檢視變數值,比如我們檢視變數temp的值

Python使用pdb除錯程式碼的技巧

使用l檢視上下行程式碼

在Pdb中我們可以使用l檢視當前行上下幾行程式碼

Python使用pdb除錯程式碼的技巧

使用s進入子函式

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

Python使用pdb除錯程式碼的技巧

使用r執行函式直到結束

在pdb中可以使用r來執行當前執行函式到結束

Python使用pdb除錯程式碼的技巧

使用c停止除錯並繼續執行

現在我們修改相關程式碼完成除錯,可以使用c命令繼續執行命令

Python使用pdb除錯程式碼的技巧

當然也可以輸入q直接退出除錯介面

以上就是使用Python標準庫執行一次debug過程,可以看到pdb在命令列下除錯程式碼是非常出色的,當然在某些情況下pdb將不是最好的選擇比如涉及到多執行緒相關,而在比較大型的專案使用pdb也顯得力不從心,因此我們需要靈活選擇除錯方案,不過至少我們又掌握了一種程式碼除錯工具,不是嗎?