当前位置:首页 > 文章列表 > 文章 > 软件教程 > VS Code 配置 launch.json 调试远程服务进程

VS Code 配置 launch.json 调试远程服务进程

来源:17golang原创 2026-10-07 09:19:04 0浏览 收藏

远程服务已经在 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。这里的关键是不要在本机用户设置里另建一份同名配置,否则换到远程窗口时容易看见错误的项目路径。

VS Code远程工作区中Run and Debug面板创建launch.json入口的界面说明图
图1:远程工作区中的 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指定调试端点必须和远程进程监听地址、端口一致
localRootVS Code 工作区路径通常使用当前远程工作区变量
remoteRoot运行进程看到的项目路径必须替换成服务实际部署目录

如果 Remote-SSH 窗口和服务进程在同一台远程主机,127.0.0.1:9229 通常指向远程主机本身;如果服务在另一台机器或容器里,不能照抄这个地址,需要改成可达的调试端点,并同步处理 SSH 隧道、容器端口或网络策略。

三、启动 attach 并确认断点真的连上

保存文件后,按 F5,或点击 Run and Debug → Attach Remote Node Service。VS Code 会按照配置连接已经运行的进程。随后在服务入口或请求处理函数左侧灰色边栏点击一次,设置红色断点,再访问对应接口。

VS Code远程attach调试显示9229端口路径映射和断点命中状态的界面说明图
图2:attach 远程服务后的结果说明图,绿色连接状态、断点停顿和变量面板共同构成验收信号。

可见状态应当同时满足三项:调试工具栏出现继续、单步和停止按钮;编辑器在断点行暂停;Debug Console 可以读取当前作用域变量。只看到配置被选中而没有暂停,通常只能说明文件被解析,不能证明路径映射和远程进程连接成功。

# 在远程主机上确认服务仍由预期用户运行
ps -ef | grep '[n]ode.*server.js'

# 确认调试端口仍在监听;连接状态由 VS Code 面板另行确认
ss -lntp | grep 9229

四、连接失败时按端口、路径、启动方式排查

  1. 报 connection refused:先看远程服务是否真的使用 --inspect 启动,端口是否写成了另一个值;服务重启后端口也可能改变。
  2. 能连接但断点变灰:优先核对 remoteRoot。它应与远程进程加载脚本的绝对路径对应,而不是本机复制出来的目录。
  3. 断点停住但变量不对:确认当前选中的配置、Node.js 进程和源码版本属于同一次部署,避免旧进程仍占用 9229。
  4. 远程窗口找不到配置:从资源管理器确认 .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 或受控隧道访问,完成调试后关闭端口;不要把调试协议直接当成普通业务端口暴露。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Checker 如何在 Go 结构体上同时完成输入清洗和规则校验Checker 如何在 Go 结构体上同时完成输入清洗和规则校验
上一篇
Checker 如何在 Go 结构体上同时完成输入清洗和规则校验
go doc package@version 怎么查看指定依赖版本的 API
下一篇
go doc package@version 怎么查看指定依赖版本的 API
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    363次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    417次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    430次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    384次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    210次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码