VS Code 配置 launch.json 调试远程服务进程
来源:17golang原创
时间:2026-10-07 09:19:04 181浏览 收藏
远程服务已经在 Linux 主机上运行时,最稳妥的做法不是把调试器装在本机后反复猜端口,而是在 VS Code 的 Remote-SSH 工作区里保存一份 .vscode/launch.json,用 request: attach 连接已经开启检查端口的进程。这样菜单入口、端口、远程路径和断点行为都能随项目配置复用。
VS Code 官方地址:https://code.visualstudio.com/docs/debugtest/debugging-configuration
- 先用 Remote-SSH 打开远程项目,再创建远程工作区自己的
launch.json。 - 远程进程已在调试模式运行时使用
attach,端口和remoteRoot必须与服务端一致。 - 成功标准是调试面板显示连接、断点停住且 Debug Console 能看到远程变量,不只是窗口打开。
一、先把调试入口放到远程工作区
在 VS Code 按 Ctrl+Shift+P(macOS 为 ⌘⇧P),执行 Remote-SSH: Connect to Host...,选择目标主机。连接完成后,从 File → Open Folder... 打开远程项目目录。观察窗口左下角的远程连接标识,以及资源管理器中项目文件是否来自远端。
随后点击左侧 Run and Debug,选择 create a launch.json file。如果已经存在配置,点击配置下拉框旁的齿轮,直接打开工作区的 .vscode/launch.json。这里的关键是不要在本机用户设置里另建一份同名配置,否则换到远程窗口时容易看见错误的项目路径。

看到项目根目录下出现 .vscode/launch.json,并且配置下拉框能列出新条目,就可以进入下一步。它说明文件位置正确,但还不代表远程进程已经开放调试端口。
二、把 launch.json 改成 attach 配置
以远程主机上的 Node.js 服务为例,先让服务以检查模式启动。下面的命令只是启动方式示例,端口由团队约定;不要把调试端口直接暴露到公网。
# 在远程主机的项目目录启动检查模式,供 VS Code attach node --inspect=127.0.0.1:9229 server.js # 只在远程主机上确认监听状态,不把结果当成 VS Code 已连接 ss -lntp | grep 9229
回到 .vscode/launch.json,把生成的模板改成下面的配置。JSON 必须保持有效,所以不在代码块里塞注释;每个字段的作用放在代码后解释。
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Attach Remote Node Service",
"address": "127.0.0.1",
"port": 9229,
"localRoot": "${workspaceFolder}",
"remoteRoot": "/srv/example-service"
}
]
}
| 字段 | 作用 | 核对边界 |
|---|---|---|
request | 选择连接已运行进程的方式 | 远程服务已用 inspect 模式启动时用 attach |
address / port | 指定调试端点 | 必须和远程进程监听地址、端口一致 |
localRoot | VS Code 工作区路径 | 通常使用当前远程工作区变量 |
remoteRoot | 运行进程看到的项目路径 | 必须替换成服务实际部署目录 |
如果 Remote-SSH 窗口和服务进程在同一台远程主机,127.0.0.1:9229 通常指向远程主机本身;如果服务在另一台机器或容器里,不能照抄这个地址,需要改成可达的调试端点,并同步处理 SSH 隧道、容器端口或网络策略。
三、启动 attach 并确认断点真的连上
保存文件后,按 F5,或点击 Run and Debug → Attach Remote Node Service。VS Code 会按照配置连接已经运行的进程。随后在服务入口或请求处理函数左侧灰色边栏点击一次,设置红色断点,再访问对应接口。

可见状态应当同时满足三项:调试工具栏出现继续、单步和停止按钮;编辑器在断点行暂停;Debug Console 可以读取当前作用域变量。只看到配置被选中而没有暂停,通常只能说明文件被解析,不能证明路径映射和远程进程连接成功。
# 在远程主机上确认服务仍由预期用户运行 ps -ef | grep '[n]ode.*server.js' # 确认调试端口仍在监听;连接状态由 VS Code 面板另行确认 ss -lntp | grep 9229
四、连接失败时按端口、路径、启动方式排查
- 报 connection refused:先看远程服务是否真的使用
--inspect启动,端口是否写成了另一个值;服务重启后端口也可能改变。 - 能连接但断点变灰:优先核对
remoteRoot。它应与远程进程加载脚本的绝对路径对应,而不是本机复制出来的目录。 - 断点停住但变量不对:确认当前选中的配置、Node.js 进程和源码版本属于同一次部署,避免旧进程仍占用 9229。
- 远程窗口找不到配置:从资源管理器确认
.vscode/launch.json位于当前打开的工作区根目录;多根工作区还要确认配置属于正确的文件夹。
当服务在容器中运行时,remoteRoot 应指向容器内路径,不能只填宿主机路径;当 SSH 隧道负责转发端口时,address 和 port 应填写 VS Code 所在调试环境实际能够访问的端点。调试完成后点击停止,并关闭不再需要的 inspect 端口。
五、最后用一张清单验收
| 检查项 | 通过标准 | 不通过时先查什么 |
|---|---|---|
| 工作区 | 左下角显示远程连接,项目文件来自远端 | Remote-SSH 连接和 Open Folder 路径 |
| 配置 | 当前调试下拉框能选中 attach 条目 | .vscode/launch.json 是否在当前工作区 |
| 端口 | 远程服务监听与配置中的端口一致 | --inspect 参数、SSH 隧道和容器转发 |
| 源码 | 断点变红并能停在请求处理代码 | localRoot 与 remoteRoot 映射 |
| 结果 | Debug Console 能查看变量,停止后进程状态可控 | 进程版本、配置选择和旧调试进程 |
这套配置的价值在于把“连哪台机器、连哪个端口、源码怎样对应”写成可审查文件。远程服务换部署目录时只改 remoteRoot,服务换端口时同步修改启动参数和 launch.json,再通过一次断点命中确认,而不是凭界面是否打开来判断完成。
相关问题
launch 和 attach 应该选哪个?
launch 让调试器负责启动应用;attach 连接已经运行且开放调试端口的进程。远程服务由 systemd、容器或部署脚本管理时,通常更适合 attach。
为什么端口通了,断点仍然不命中?
端口只证明调试端点可达,断点还依赖源码路径映射、进程加载的脚本版本和当前配置。先查 remoteRoot,再确认服务进程没有指向旧发布目录。
调试端口可以一直监听公网吗?
不建议。优先监听远程回环地址并通过 Remote-SSH 或受控隧道访问,完成调试后关闭端口;不要把调试协议直接当成普通业务端口暴露。
-
482 收藏
-
447 收藏
-
397 收藏
-
236 收藏
-
452 收藏
-
文章 · 软件教程 | 3小时前 | 开发环境 · docker · vs code · 团队协作 · docker 开发环境 项目依赖 devcontainer.json VS Code Dev Container VS Code扩展304 收藏
-
233 收藏
-
396 收藏
-
440 收藏
-
128 收藏
-
195 收藏
-
241 收藏
-
403 收藏
-
335 收藏
-
244 收藏
-
文章 · 软件教程 | 1天前 | github · 故障排查 · CI/CD · gitHub actions · GitHub Actions 失败任务 Job workflow run 重跑任务162 收藏
-
430 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习