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

調試步驟如下:

  1. 直接運行Main.py或者在命令行中運行python Main.py
  2. 代碼中加入斷點
  3. 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM