Python 中的 breakpoint()

Python breakpoint() 是在 Python 3.7 中引入的一個新的內建函數。Python 代碼調試一直以來都是一個痛苦的過程,因為實際代碼和調試模塊代碼之間存在著緊密的耦合。例如,如果你使用 pdb 調試器,那麼你將不得不在你的程序代碼中調用 pdb.set_trace()。如果你想使用其他調試器,比如 web-pdb,那麼你將不得不刪除所有與 PDB 相關的代碼並添加 web_pdb.set_trace() 方法。這導致使用 Python 調試器的開銷很大,並使 Python 代碼難以調試和維護。這就是為什麼 Python 3.7 引入了 breakpoint() 方法,它允許我們編寫鬆散耦合的調試代碼。

Python breakpoint()

Python breakpoint() 函數調用 sys.breakpointhook() 函數。默認情況下,sys.breakpointhook() 調用 pdb.set_trace() 函數。因此,至少使用 breakpoint() 在使用調試器時提供了方便,因為我們不需要顯式地導入 pdb 模塊。讓我們看一個簡單的 breakpoint() 函數使用示例。我們有一個名為 python_breakpoint_examples.py 的 Python 腳本,其中包含以下代碼。

x = 10
y = 'Hi'
z = 'Hello'
print(y)

breakpoint()

print(z)

執行此腳本時,PDB 調試器控制台將打開。

$python3.7 python_breakpoint_examples.py
Hi
> /Users/pankaj/Documents/PycharmProjects/BasicPython/basic_examples/python_breakpoint_examples.py(8)()
-> print(z)
(Pdb) c
Hello
$

Python斷點(breakpoint())- 停止除錯

Python的sys.breakpointhook()函數使用環境變量PYTHONBREAKPOINT來配置調試器。如果未設置,則使用默認的PDB調試器。如果設置為“0”,則該函數立即返回,不執行代碼調試。當我們想要在不進行調試的情況下運行代碼時,這非常有用。

$PYTHONBREAKPOINT=0 python3.7 python_breakpoint_examples.py
Hi
Hello
$

Python斷點(breakpoint())- 更改調試器模塊

我們可以使用PYTHONBREAKPOINT環境變量來提供要由breakpoint()函數調用的調試器方法。這非常有用,因為我們可以輕鬆地更改調試器模塊而不需要進行任何代碼更改。假設我們想要使用web-pdb調試器。我們可以使用PYTHONBREAKPOINT=web_pdb.set_trace將其輕鬆地鉤入我們的程序中。首先,確保已安裝web-pdb。您可以使用pip3.7 install web-pdb命令進行安裝。

根據web-pdb文檔,它與Python 3.7中新增的breakpoint()函數兼容。

$PYTHONBREAKPOINT=web_pdb.set_trace python3.7 python_breakpoint_examples.py
Hi
2018-08-10 12:49:54,339: root - web_console:110 - CRITICAL - Web-PDB: starting web-server on pankaj:5555...

打開在控制台日誌中提供的網絡服務器URL,您將看到像下面圖片那樣的調試窗口。我們可以使用這個界面發出PDB命令,您可以發送“c”命令來繼續並完成我們的程序。

總結

Python的breakpoint()函數是Python調試功能中非常有用的一個功能。建議在調試時使用它,這樣您可以輕鬆地隨時連接其他第三方調試器。它還提供了一個簡單的選項來禁用調試器並正常運行程序。

您可以在我們的GitHub存儲庫中查看更多的Python示例。

參考資料:官方文檔

Source:
https://www.digitalocean.com/community/tutorials/python-breakpoint