vscode local attach 和 remote debug

时间:2022-09-10 17:23:34

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角色划分;

结果如下:

vscode local attach 和 remote debug

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即可进入调试环境。

vscode local attach 和 remote 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

vscode local attach 和 remote debug的更多相关文章

  1. Java:Remote Debug

    Java  Remote Debug -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,add ...

  2. [Reomting Debug] 巧用VS 的remote debug 功能远程调试程序 经验分享.

    前言: 有时候我们Dev(开发人员)需要debug tester(测试人员)或者customer(客户)的环境,可tester的机器上没有Code,是不是有点着急? 而且是多版本应用且tester 发 ...

  3. How to use VS2012 remote debug Windows Azure Cloud Services

    Background: Windows Azure Cloud Services 可以在本地调试,使用Visual Studio 2012 + 模拟器 Emulator.但是模拟器的工作状态和环境和真 ...

  4. VS 开发工具中的Remote Debug 功能远程调试程序经验分享

    前言: 有时候我们Dev(开发人员)需要debug tester(测试人员)或者customer(客户)的环境,可tester的机器上没有Code,是不是有点着急? 而且是多版本应用且tester 发 ...

  5. QT Creator 环境使用 remote debug 调试 arm 程序

    这里使用的 4.8.5 QTE 环境,之前尝试过远程使用 GDB 来调试板子上的 QT 程序,但是没成功.没有调试手段比较痛苦,今天又花了点时间,居然搞定了.粗做记录. 工具版本: 1. QtCrea ...

  6. golang remote debug和docker debug

    在编写 Go 代码的时候,因为很多时候都是需要调试服务器上的代码的,作为一个年长的工程师,肯定不能用 log.Printf 来调试问题,所以我选择了 delve 这个工具,通过 delve 我可以像本 ...

  7. iOS web remote debug 正确的姿势

    在使用iOS Remote debug需要做以下准备 1. iOS devices 开启java script and web inspector 开启方式如下: 2. mac OS 自带的Safar ...

  8. paip. java resin 远程 调试 java resin remote debug

    paip. java resin 远程 调试 java resin remote debug 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 ...

  9. Tomcat Remote Debug操作和原理

    操作篇 这部分主要讲,如何开启tomcat远程调试,并佐以实例.本文方式适用于windows和linux. 假设有两台机器,A是tomcat服务器所在机器,B是IDE安装机器.A和B可以是同一台机器, ...

随机推荐

  1. 10个调试Java的技巧

    调试不仅可以查找到应用程序缺陷所在,还可以解决缺陷.对于Java程序员来说,他们不仅要学会如何在Eclipse里面开发像样的程序,更需要学会如何调试程序.本文介绍了Java程序员必知的10个调试技巧, ...

  2. python3 黑板客爬虫闯关游戏(二)

    第二关猜登录密码,需要用到urllib.request和urllib.parse 也很简单,给代码 import urllib.request as ur import urllib.parse as ...

  3. linux学习笔记--NFS

    NFS分为客户端,服务端.客户端要访问服务端,要写从RPC服务获得端口. 整个流程分为: 1,服务端rpc服务先启动2,nfs服务把端口上报给rpc服务3,rpc客户端通过服务端的rpcbind拿到访 ...

  4. DOCTYPE的详细图解

    之前有一次写代码的时候忘记写了<!DOCTYPE html> 导致样式的效果一直有点问题,查了很久才发现时候这个的锅.之后自己详细的来查找了DOCTYPE的作用. 在目前,基本上都是采用浏 ...

  5. Microsoft&period;Owin&period;Hosting 实现启动webapp&period;dll

    Microsoft.Owin.Hosting 下面是 asp.net core 实现 using System;using System.Collections.Generic;using Syste ...

  6. springMVC简单示例

    1.新建web工程 2.引入springframework架包 3.配置文件 web.xml <?xml version="1.0" encoding="UTF-8 ...

  7. Xamarin&period;Android开发实践(十五)

    Xamarin.Android学习之应用程序首选项 一.前言 任何App都会存在设置界面,如果开发者利用普通控件并绑定监听事件保存设置,这 一过程会非常的枯燥,而且耗时.我们可以看到Android系统 ...

  8. 使用soapui调用webservice接口

    soapui是专门模拟调用webservice接口的工具,下面介绍下怎么使用: 1.下载soapui并安装: 2.以免费天气获取接口为例:http://www.webservicex.net/glob ...

  9. Linux C程序的编译过程

    Linux C程序的编译过程 学习一门语言程序,本人觉得还是得学习它的编译规则,现在,通过小例子小结下自己对C编译的认识. /*test.c     了解C程序的编译*/ #include <s ...

  10. C&plus;&plus; Primer 学习笔记&lowbar;35&lowbar;STL实践与分析(9)--map种类(在)

    STL实践与分析 --map类型(上) 引: map是键-值对的集合. map类型通常能够理解为关联数组:能够通过使用键作为下标来获取一个值,正如内置数组类型一样:而关联的本质在于元素的值与某个特定的 ...