vscode local attach 和 remote debug Pycharm遠程調試原理及配置

VSCode是MS推出的一款免費的開源並跨平臺的輕量級代碼編輯器,內置Git和Debug等經常使用功能,強大的插件擴展功能以及簡單的配置幾乎能夠打形成任意編程語言的IDE。本文簡單聊一下其本地attach和remote debug功能。html

默認在vscode中打開py文件能夠直接使用斷點調試,使用的Debug模式爲:Python: Current File (Integrated Terminal),這是針對vscode中當前打開的文件。python

對於獨立於vscode以外運行程序的debug,根據是否和vscode位於同一主機能夠分爲local attach和remote debug。編程

0. 配置環境

下面以python爲例簡單講一下debug功能。json

  • 安裝vscode版本1.31.1
  • python第三方庫ptvsd
  • vscode插件python

實際使用根據須要下載最新版本便可。app

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.pypost

# -*- 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的值一致。url

ptvsd模塊安裝:python -m pip install --upgrade ptvsdspa

調試步驟以下:

  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

相關文章
相關標籤/搜索