答案:launch.json 的 env 字段必须显式声明,否则 process.env 在 VS Code 调试中读不到;它默认不继承终端或系统环境变量,且 Node.js 不支持 envFile 自动加载,需配合 require('dotenv').config() 或 env 字段手动注入。

launch.json 的 env 字段必须显式声明,否则 process.env 读不到
VS Code 调试器启动 Node.js 进程时,**默认不继承终端或系统环境变量**。哪怕你在终端里 export NODE_ENV=development,process.env.NODE_ENV 在调试中仍是 undefined。
-
env是唯一可靠入口,必须写进launch.json的配置项里,不能靠 .env 文件或 shell 配置自动加载 - 值支持字符串和插值,例如:
"NODE_ENV": "development"、"HOME": "${env:HOME}" - 敏感信息(如
API_KEY)别硬编码进launch.json;建议配合.gitignore忽略该文件,或改用envFile(仅部分调试器支持,如 Python 的 ptvsd,Node.js 原生不支持)
C++ 和 Node.js 的环境字段名完全不同
很多人在 C++ 项目里照搬 Node.js 写法,把 env 当成通用字段,结果变量根本没生效——这是最常踩的坑之一。
- Node.js / Python / Go:用
env字段,类型是对象:{"PORT": "3001"} - C++(cppdbg):字段名是
environment,类型是数组,且每个条目必须带name和value:
{
"environment": [
{ "name": "DEBUG", "value": "1" },
{ "name": "PATH", "value": "${env:PATH}:/usr/local/bin" }
]
}
- 漏掉
name或写成key、env,GDB 就会静默忽略,进程可能根本起不来
跨平台 PATH 拼接要手动处理分隔符
${env:PATH} 插值本身没问题,但拼接新路径时,Linux/macOS 用 :,Windows 用 ;。写错会导致 node、gdb 或其他二进制找不到。
- macOS/Linux:
"PATH": "${env:PATH}:/opt/homebrew/bin:/usr/local/bin" - Windows:
"PATH": "${env:PATH};C:\Program Files\nodejs;C:\mytools" - 别用正斜杠混写 Windows 路径(如
C:/mytools),某些调试器会解析失败 - 如果不确定原始
PATH是否为空,建议先在终端执行echo $PATH或echo %PATH%确认
VS Code 启动方式决定 ${env:VAR} 能否插值成功
你双击桌面图标打开 VS Code,它继承的是 GUI 登录会话环境,通常不含 ~/.zshrc 或 ~/.bash_profile 里的 PATH 扩展——这意味着 ${env:PATH} 可能为空或极简,导致后续拼接失效。
- 最稳做法:从已配好环境的终端启动 VS Code,例如在 iTerm2 或 Windows Terminal 中执行
code . - 次选方案:在
settings.json中静态补全关键变量,如:"terminal.integrated.env.osx": {"PATH":"/opt/homebrew/bin:${env:PATH}"},但注意修改后需关闭并新建终端才生效 - 别依赖“全局环境变量”类插件——它们对
node或cppdbg调试器完全无效
真正容易被忽略的是这三点叠加:C++ 的 environment 数组结构、PATH 分隔符差异、以及 VS Code 启动源头对插值变量的可用性影响。任何一个出错,调试器连进程都启不起来。


















