[VSCode] 使用 debugpy 模組,遠端除錯 Python 程式
今天終於把 VSCode 的 Python 遠端除錯功能弄好了!
以前我都是用 python pdb,
但是用這種文字互動模式的缺點是,
不像 IDE 那樣可以很方便的查看多個變數,
下中斷點也不像在 IDE 上直接下那樣方便~
今天研究了一下,VSCode 可以搭配 debugpy 這個模組,
就能實現對遠端機器上的 Python 程式除錯囉~
(以前是用 ptvsd,但現在似乎被 debugpy 取代了)
1. 在遠端機器執行 debugpy
首先在遠端機器上用 pip 安裝 debugpy 模組:
pip install debugpy
接著執行如下的指令,讓 debugpy 監聽 30000 port,
等待 VSCode 連線進來後,才開始執行 test.py:
python -m debugpy --listen 0.0.0.0:30000 --wait-for-client ./test.py
執行完上面的指令,就會停在那邊,等待 VSCode 的連線進來。
2. 從 VSCode 端連線至遠端機器
在 VSCode > Debug > Add Configuration,
新增一個除錯設定檔如下,這邊的 host 要設成遠端機器的 IP 或機器名稱,
port 要設定成 debugpy 那邊設定的 port (本例中是 30000):
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Python: Remote Attach", "type": "python", "request": "attach", "port": 30000, "host": "172.22.1.1", "pathMappings": [ { "localRoot": "${workspaceFolder}/src", "remoteRoot": "." } ] } ] }
接著在 VSCode > Run Debug > Start Debugging on VSCode,
就會使用這邊的設定,連線到遠端機器的 debugpy,
可以開始除錯了,不管是設中斷點、單步執行、整個函式執行,
或是改變現在要執行的敘述、顯示變數的值等等,都沒有問題~
因為一旦連上線後,遠端的程式就會開始跑,
因此最好先在 VSCode 端先設好中斷點,免得無法停在想觀察的地方。
設中斷點有幾種方法:
- VSCode > Debug > Toggle Breakpoint 或是 New Breakpoint
- 在 VSCode 程式編輯畫面,行數的左邊點一下 (會有小紅點出現)
- 在程式碼裡插入 debugpy.breakpoint() 函式呼叫
使用 debugpy.breakpoint() 的用法如下:
import debugpy debugpy.breakpoint()
以方便性來說,當然是第一種和第二種比較方便,
可以動態新增或刪除中斷點。
但比較奇怪的是,有時候程式就直接衝過去,
好像沒有管 VSCode 上的中斷點… (可能是某種 bug)
這時候比較穩當的方法,就還是在程式裡,
插入一個 debugpy.breakpoint() 的函式呼叫,只要跑到就一定會停下來囉~
參考資料:
Python debug configurations in Visual Studio Code
使用VS Code對遠端server的python程式進行debug