vscode local attach 和 remote debug
VSCode是MS推出的一款免費的開源並跨平臺的輕量級程式碼編輯器,內建Git和Debug等常用功能,強大的外掛擴充套件功能以及簡單的配置幾乎可以打造成任意程式語言的IDE。本文簡單聊一下其本地attach和remote debug功能。
預設在vscode中開啟py檔案可以直接使用斷點除錯,使用的Debug模式為:Python: Current File (Integrated Terminal),這是針對vscode中當前開啟的檔案。
對於獨立於vscode之外執行程式的debug,根據是否和vscode位於同一主機可以分為local attach和remote debug。
0. 配置環境
下面以python為例簡單講一下debug功能。
- 安裝vscode版本1.31.1
- python第三方庫ptvsd
- vscode外掛python
實際使用根據需要下載最新版本即可。
1. 本地Local Attach
開啟vscode工程目錄下的.vscode/launch.json檔案,新增如下內容:
{ "version": "0.2.0", "configurations": [ { "name": "Python: Local Attach", "type": "python", "request": "attach", "port": 12345, "host": "127.0.0.1", "pathMappings": [ { "localRoot": "${workspaceFolder}", "remoteRoot": "." } ] }, ] }
如果沒有launch.json,新建一個即可,或者開啟左側debug view,選擇開啟launch.json,vscode會開啟或者建立一個預設的json配置檔案,然後將上面configurations列表中的內容複製到已有的launch.json中即可。
新建一個python指令碼檔案./Main.py
# -*- coding:utf-8 -*- import datetime, time # import VSCodeDebug import ptvsd host = "127.0.0.1" # or "localhost" port = 12345 print("Waiting for debugger attach at %s:%s ......" % (host, port)) ptvsd.enable_attach(address=(host, port), redirect_output=True) ptvsd.wait_for_attach() while True: time.sleep(1) cur_date = datetime.datetime.now() print cur_date
指令碼中的host和port必須和launch.json中當前debug模式中host與port的值一致。
ptvsd模組安裝:python -m pip install --upgrade ptvsd
除錯步驟如下:
- 直接執行Main.py或者在命令列中執行python Main.py
- 程式碼中加入斷點
- F5啟動Local Attach除錯模式
注意:
- 這個過程不能先啟動local attach,否則會連線失敗;
- 首先要執行指令碼,指令碼執行到ptvsd.wait_for_attach()會掛起,等待vscode的連結;
- 啟動attach,連線到掛起狀態的指令碼,指令碼繼續執行;
- 該過程中指令碼和vscode沒有嚴格的client與server角色劃分;
結果如下:
2. 遠端Remote Debug
遠端除錯可以讓我們在本地使用vscode除錯遠端主機上執行的程式,而只需要在本地安裝vscode。
在上面.vscode/launch.json檔案"configurations"列表中加入下面的內容作為Remote Debug的配置:
{ "name": "Python: Remote Debug", "type": "python", "request": "attach", "port": 12345, // valid port in remote host "host": "1.2.3.4", // replace with your remote host IP "pathMappings": [ { "localRoot": "${workspaceFolder}", //the path of the folder opened in VS Code, can be replaced by real path, such as: "D:\\Projects\\Cnblogs\\Alpha Panda" "remoteRoot": "~/demo" // Linux example; adjust as necessary for your OS and situation. } ] },
這裡有兩點需要注意:
- 指令碼中和launch.json需要替換遠端主機有效的IP地址和Port;
- pathMappings列表中欄位localRoot和remoteRoot分別表示本地和遠端工程目錄的路徑;
遠端指令碼新增如下程式碼:
import ptvsd host = "1.2.3.4" # remote host ip port = 12345# remote host valid port ptvsd.enable_attach(address=(host, port), redirect_output=True) ptvsd.wait_for_attach()
由於remote debug要求本地和遠端程式的原始碼必須一致,因此
本地指令碼新增如下程式碼:
# import ptvsd # host = "1.2.3.4" # remote host ip # port = 12345# remote host valid port # ptvsd.enable_attach(address=(host, port), redirect_output=True) # ptvsd.wait_for_attach()
此外,本地和遠端都需要安裝ptvsd模組。
這樣啟動遠端的指令碼程式,本地vscode新增斷點,啟用新加的Python: Remote Debug模式debug即可進入除錯環境。
本地可以通過ptvsd來啟動遠端的程式:
python -m ptvsd --host 1.2.3.4 --port 12345 --wait -m myproject
3. Others
經過上面操作,Debug 配置中有兩種debug模式:
- Python: Local Attach
- Python: Remote Debug
python外掛預設會提供幾種不同的debug configs.
如Python: Django,Python: Flask等可以參考一下。
只有上面兩種沒法直接除錯vscode中的檔案,下面新增本地的debug 模式的配置:
{ "name": "Python: Current File (Integrated Terminal)", "type": "python", "request": "launch", "program": "${file}", "console": "integratedTerminal" },
總之,vscode無論出身還是功能以及美觀簡單易用性等都是無可挑剔的,經常使用sublime text的話,可以嘗試一下vscode.
如果使用Pycharm進行python開發可以參考一下我的另一篇博文: Pycharm遠端除錯原理及配置
參考:
https://code.visualstudio.com/docs/python/debugging
https://code.visualstudio.com/docs/editor/variables-reference