基于vscode连接到远程服务中debug

本文介绍了如何在Windows上的VSCode中调试WSL2子系统中运行的Docker容器内的Flask应用,以及如何远程连接到任何服务器进行开发和调试。关键步骤包括安装VSCode的相关扩展,如WSL、DevContainers、Docker和Remote-SSH,配置Docker容器的SSH服务,确保远程服务器或容器有SSH服务以供VSCode连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文章主要讲解以下两点的任务

1.在windows的vscode中去debug 本机子系统wsl2中运行的docker容器

该篇文件参考知乎上这篇文章

vscode远程连接到本机 wsl2子系统 中正在运行的 docker容器,该docker中有一个flask实例,通过vscode远程debug它

1.1安装vscode插件

1.安装 VS Code WSL 扩展
在这里插入图片描述
此扩展使你能够在 VS Code 中打开在 WSL 上运行的 Linux 项目(无需担心路径问题、二进制兼容性或其他跨 OS 的难题)。

1.2安装 VS Code 开发容器扩展(Dev Containers)

在这里插入图片描述
此扩展使你能够打开容器内的项目文件夹或存储库,并利用 Visual Studio Code 的完整功能集在容器中执行开发工作。

1.3安装 VS Code Docker扩展(docker)

在这里插入图片描述
此扩展添加了从 VS Code 内生成、管理和部署容器化应用程序的功能。 (需要开发容器扩展才能将容器实际用作开发环境。)

1.4安装 VS Code Remote-ssh扩展
在这里插入图片描述
安装完 docker,以及 Remote - SSH 后,vscode左侧页面会出现以下两个图标
在这里插入图片描述

1.5通过docker扩展连接容器并debug

docker扩展里面有 CONTAINERS ,会自动加载存在的docker容器,右击想要连接的容器,点击附加到 vscode
在这里插入图片描述
可能出现的问题:
显示附加到容器时出错

解决办法:
尝试用 管理员身份启动 windows中的vscode再重试

1.6在远程连接的容器中安装python扩展用于debug

在这里插入图片描述
至此,该容器中的flask应用可以在vscode中debug了
注意:
容器中已经运行了5000端口的flask进程,你想debug,要么停止该进程,要么换一个端口进行debug
在这里插入图片描述

2.在windows的vscode连接到任何远程服务器(也可debug),并开发

2.1 配置docker(可选)

需要安装 Remote-SSH扩展
如果要远程连接的是docker容器,需要对docker容器内进行配置,步骤如下

  1. docker容器需要暴露容器中的22端口
  2. 容器中需要支持vim,ssh,wget这些命令
  3. 以root身份进入docker进行ssh配置

1.docker exec -it -u root flask_demo bash
2.进入容器后 输入passwd,修改默认密码
3.修改ssh配置文件 vim /etc/ssh/sshd_config
PermitRootLogin yes #允许root用户使用ssh登录,文件内容最后面添加
4.假如没有该文件,需要给容器安装openssh-server和openssh-client,通过 apt-get 下载
5.修改完配置后,重启ssh;/etc/init.d/ssh restart
6.退出容器,测试连接; ssh root@<目标ip> -p <容器中22端口映射出的端口号>

无论是远程服务器或者是远程docker容器,最重要的是需要有ssh服务,用于给vscode的远程debug连接

2.2 配置电脑环境

1.安装git
2.在环境变量里面加入新的git路径,让其他路径下的终端输入git -v可以显示git版本信息
在这里插入图片描述

2.3 vscode远程连接
在这里插入图片描述
回车后输入ssh连接密码
在这里插入图片描述
打开项目目录
在这里插入图片描述
连接后,若想debug,需要在远程连接服务器上下载python扩展包用于debug
在这里插入图片描述
至此,可以在vscode中连到服务器中,并debug服务器中的flask应用
在这里插入图片描述
可能出现的问题

远程连接不上,终端和vscode都连接失败,并且出现下图的报错
在这里插入图片描述
解决办法

  1. 检查是否开代理,打开的话关闭
  2. 登入到容器中重新启动ssh,/etc/init.d/ssh restart

出现如下图的报错
在这里插入图片描述
解决办法
1.vscode没有以管理员身份打开,以管理员身份打开后重试

<think>好的,用户现在想了解如何在VSCode中进行远程调试。之前他们问过关于dlv远程调试Go程序的问题,现在可能希望将类似的流程应用到VSCode环境中,特别是针对Go项目。用户可能是开发人员,正在使用VSCode作为主要编辑器,需要远程调试运行在另一台机器上的服务,比如测试服务器或生产环境中的问题复现。 首先,我需要确认VSCode远程调试配置步骤。用户可能已经熟悉了dlv的命令行用法,但需要图形化界面更直观的操作。需要确保他们正确配置了launch.json文件,包括指定远程主机的IP和调试端口,以及本地和远程路径的映射,这有助于源代码的正确匹配。 然后,要考虑到用户可能的痛点,比如配置错误、连接问题或断点不生效。常见问题可能包括防火墙设置、调试符号缺失或路径映射不正确。需要提醒用户检查这些方面,尤其是路径映射,因为如果远程和本地的代码路径不一致,断点可能无法命中。 另外,用户可能没有安装必要的VSCode扩展,比如Go扩展和Delve插件。需要指导他们安装这些工具,并确保版本兼容性。同时,安全方面的问题也需要提及,比如在公共网络上开放调试端口的风险,建议只在可信网络中使用,并调试结束后关闭服务。 还需要比较之前dlv命令行调试和VSCode远程调试的异同,强调图形化界面的便利性,比如可视化的断点设置、变量查看和调用堆栈跟踪。这些对于习惯IDE的用户来说更加友好。 最后,可能需要给出一个具体的示例配置,帮助用户更好地理解如何修改launch.json文件,以及如何启动远程调试服务端。同时,常见问题解决部分应该简明扼要,覆盖用户可能遇到的典型问题,如连接失败、权限问题等,并提供相应的解决命令或步骤。</think>以下是通过 Visual Studio Code 实现远程调试的详细指南: --- ### 一、核心原理 通过 `dlv` 调试器建立本地 VSCode远程程序的通信,实现: - 断点设置 - 变量监控 - 堆栈跟踪 - 代码热更新 --- ### 二、环境准备 1. **远程机器** ```bash # 安装 delve go install github.com/go-delve/delve/cmd/dlv@latest # 编译带调试信息的程序 go build -gcflags="all=-N -l" -o myapp main.go ``` 2. **本地 VSCode** - 安装官方 [Go 扩展](https://marketplace.visualstudio.com/items?itemName=golang.go) - 安装 [Delve 插件](https://github.com/golang/vscode-go/wiki/debugging) --- ### 三、配置流程 #### 步骤 1:远程启动调试服务 ```bash # 方式一:调试运行中的程序 dlv attach <PID> --headless --listen=:2345 --api-version=2 # 方式二:直接启动程序 dlv exec ./myapp --headless --listen=:2345 --api-version=2 ``` #### 步骤 2:本地 VSCode 配置 1. 创建 `.vscode/launch.json`: ```json { "version": "0.2.0", "configurations": [ { "name": "Remote Debug", "type": "go", "request": "attach", "mode": "remote", "remotePath": "/absolute/path/on/remote/server", // 远程代码路径 "port": 2345, "host": "1.2.3.4", // 远程服务器IP "cwd": "${workspaceFolder}", "showLog": true } ] } ``` --- ### 四、调试操作 1. **设置断点**:在代码行号左侧点击添加 2. **启动调试**:按 F5 或点击调试侧边栏 ▶️ 按钮 3. **功能面板**: - 变量监控(Variables) - 调用堆栈(Call Stack) - 断点管理(Breakpoints) - 交互式调试控制(Continue/Step Over/Step Into) --- ### 五、路径映射技巧 当本地与远程路径不一致时: ```json "pathMappings": [ { "localRoot": "${workspaceFolder}", "remoteRoot": "/remote/code/path" } ] ``` --- ### 六、常见问题排查 | 现象 | 解决方案 | |--------------------|--------------------------------------------------------------------------| | 断点不生效 | 1. 检查路径映射是否准确<br>2. 确认编译时包含调试符号 | | 连接超时 | 1. 检查防火墙设置<br>2. 确认远程 `dlv` 服务已启动 | | 变量显示异常 | 1. 升级 delve 版本<br>2. 检查编译器优化选项 | | 调试会话断开 | 添加 `--accept-multiclient` 参数允许多次连接 | --- ### 七、生产环境建议 - 🔐 使用 SSH 隧道加密通信: ```bash ssh -L 2345:localhost:2345 user@remote-host ``` - ⏱️ 调试完成后立即关闭调试端口 - 📦 通过 Docker 调试时需添加 `--security-opt seccomp=unconfined` 参数 --- 通过此方案,您可以在本地获得与调试本地程序相同的 IDE 体验,同时实际代码运行在远程服务器上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值