Python 偵錯程式入門

2021-08-27 05:37:24 字數 3842 閱讀 5439

python 生態系統包含豐富的工具和庫,可以讓開發人員更加舒適。 例如,我們之前已經介紹了如何使用互動式 shell 增強 python。本文重點介紹另一種可以節省時間並提高 python 技能的工具:python 偵錯程式。

python 標準庫提供了乙個名為 pdb 的偵錯程式。此偵錯程式提供了除錯所需的大多數功能,如斷點、單行步進、堆疊幀的檢查等等。

了解一些pdb 的基本知識很有用,因為它是標準庫的一部分。 你可以在無法安裝其他增強的偵錯程式的環境中使用它。

執行 pdb 的最簡單方法是從命令列,將程式作為引數傳遞來除錯。 看看以下指令碼:

# pdb_test.py

#!/usr/bin/python3

from time import sleep

def countdown(number):

for i in range(number, 0, -1):

print(i)

sleep(1)

if __name__ == "__main__":

seconds = 10

countdown(seconds)

你可以從命令列執行 pdb,如下所示:

$ python3 -m pdb pdb_test.py

> /tmp/pdb_test.py(1)()

-> from time import sleep

(pdb)

使用 pdb 的另一種方法是在程式中設定斷點。為此,請匯入pdb模組並使用set_trace函式:

# pdb_test.py

#!/usr/bin/python3

from time import sleep

def countdown(number):

for i in range(number, 0, -1):

import pdb; pdb.set_trace()

print(i)

sleep(1)

if __name__ == "__main__":

seconds = 10

countdown(seconds)

$ python3 pdb_test.py

> /tmp/pdb_test.py(6)countdown()

-> print(i)

(pdb)

指令碼在斷點處停止,pdb 顯示指令碼中的下一行。 你也可以在失敗後執行偵錯程式。 這稱為事後除錯postmortem debugging。

除錯中的乙個常見用例是在執行堆疊中穿行。 python 偵錯程式執行後,可以使用以下命令:

pdb提供以下命令來執行和單步執行**:

s(tep):執行當前行並在第乙個可能的場合停止(在被呼叫的函式或當前函式中)

c(ontinue):繼續執行,僅在斷點處停止。

$ py3 test_pdb.py

> /tmp/test_pdb.py(10)countdown()

-> print(i)

(pdb) n

10> /tmp/test_pdb.py(11)countdown()

-> sleep(1)

(pdb) n

> /tmp/test_pdb.py(8)countdown()

-> for i in range(number, 0, -1):

(pdb) n

> /tmp/test_pdb.py(9)countdown()

-> import pdb; pdb.set_trace()

(pdb) s

--call--

> /usr/lib64/python3.6/pdb.py(1584)set_trace()

-> def set_trace():

(pdb) c

> /tmp/test_pdb.py(10)countdown()

-> print(i)

(pdb) c

9> /tmp/test_pdb.py(9)countdown()

-> import pdb; pdb.set_trace()

(pdb)

該示例顯示了nextstep之間的區別。 實際上,當使用step時,偵錯程式會進入pdb模組源**,而接下來就會執行set_trace函式。

檢查變數內容

$ py3 test_pdb.py

> /tmp/test_pdb.py(10)countdown()

-> print(i)

(pdb) list56

7 def countdown(number):

8 for i in range(number, 0, -1):

9 import pdb; pdb.set_trace()

10 -> print(i)

11 sleep(1)

1213

14 if __name__ == "__main__":

15 seconds = 10

(pdb) print(seconds)

10(pdb) p i

10(pdb) p number - i

0(pdb)

python 文件包含每個 pdb 命令的參考和示例。 對於開始使用 python 偵錯程式人來說,這是乙個有用的讀物。

一些增強的偵錯程式提供了更好的使用者體驗。 大多數為 pdb 新增了有用的額外功能,例如語法突出高亮、更好的回溯和自省。 流行的增強偵錯程式包括 ipython 的 ipdb 和 pdb++。

這些示例顯示如何在虛擬環境中安裝這兩個偵錯程式。 這些示例使用新的虛擬環境,但在除錯應用程式的情況下,應使用應用程式的虛擬環境。

要安裝 ipython ipdb,請在虛擬環境中使用pip

$ python3 -m venv .test_pdb

$ source .test_pdb/bin/activate

(test_pdb)$ pip install ipdb

要在指令碼中呼叫 ipdb,必須使用以下命令。 請注意,該模組稱為 ipdb 而不是 pdb:

import ipdb; ipdb.set_trace()
ipython 的 ipdb 也可以用 fedora 包安裝,所以你可以使用 fedora 的包管理器dnf來安裝它:

$ sudo dnf install python3-ipdb

你可以類似地安裝 pdb++:

$ python3 -m venv .test_pdb

$ source .test_pdb/bin/activate

(test_pdb)$ pip install pdbp

pdb++ 重寫了 pdb 模組,因此你可以使用相同的語法在程式中新增斷點:

import pdb; pdb.set_trace()

學習如何使用 python 偵錯程式可以節省你在排查應用程式問題時的時間。 對於了解應用程式或某些庫的複雜部分如何工作也是有用的,從而提高 python 開發人員的技能。

via: 

本文由 lctt 原創編譯,linux中國 榮譽推出

python的偵錯程式 Python 偵錯程式入門

python 生態系統包含豐富的工具和庫,可以讓開發人員更加舒適。例如,我們之前已經介紹了如何使用互動式 shell 增強 python。本文重點介紹另一種可以節省時間並提高 python 技能的工具 python 偵錯程式。python 偵錯程式 python 標準庫提供了乙個名為 pdb 的偵錯...

Python偵錯程式命令

命令 功能h elp 顯示命令列表 help command 顯示command的文件 c ontinue 恢復程式執行 q uit 退出偵錯程式,不再執行任何 b reak number 在當前檔案的第number行設定乙個斷點 b path to file.py number 在當前檔案的第nu...

Python偵錯程式pdb

python3 m pdb filename.py import pdb pdb.set trace 當你在命令列看到下面這個提示符時,說明已經正確開啟了pdb pdb 然後就可以開始輸入pdb命令了,下面是pdb的常用命令 命令 英文本母 l 說明 檢視當前位置前後11行源 多次會翻頁 當前位置在...