调试环境变量必须在 launch.json 中显式配置,node.js/python/go 用 env 字段(键值对),c++/gdb 用 environment 数组;跨平台 path 拼接需注意分隔符;vscode 启动方式影响 ${env:var} 插值有效性。

调试时的环境变量不会自动继承终端或系统设置,必须在 launch.json 中显式声明,否则 process.env 或 os.Getenv() 读不到你预期的值。
launch.json 的 env 字段是调试环境变量的唯一可靠入口
VSCode 调试器(无论 Node.js、Python、C++ 还是 Go)启动目标进程时,默认不携带终端或系统环境。所有变量必须通过 launch.json 的 env 字段注入。
-
env是键值对对象,值支持字符串和插值语法,例如"NODE_ENV": "development"、"HOME": "${env:HOME}" - 若需拼接原有
PATH,必须手动写全:"PATH": "${env:PATH}:/usr/local/bin"(Linux/macOS)或"PATH": "${env:PATH};C:\mytools"(Windows) - 敏感信息(如
API_KEY)不要硬编码进launch.json;建议配合.gitignore忽略该文件,或改用envFile(部分调试器支持,如 Python 的ptvsd)
C++/GDB 调试时 environment 和 env 容易混淆
在 C/C++ 的 cppdbg 类型配置中,字段名不是 env,而是 environment —— 这是唯一例外。它接受数组形式的键值对,不是对象。
- 错误写法:
"env": { "DEBUG": "1" }→ GDB 启动失败或变量未生效 - 正确写法:
"environment": [ { "name": "DEBUG", "value": "1" } ] - 仍可使用插值:
"value": "${env:HOME}",但不能省略name和value字段 - 若同时需要
preLaunchTask(如编译),确保任务本身也设置了所需环境(通过tasks.json的options.env),否则编译阶段就可能失败
调试前变量没生效?先确认 VSCode 启动方式是否污染了环境继承链
你在桌面图标双击打开 VSCode,它继承的是 GUI 登录会话环境,通常不含 ~/.zshrc 或 PATH 扩展。这会导致 ${env:PATH} 插值为空或不完整,进而让 gdb.exe 或 python 找不到。
- 最稳做法:从已配置好环境的终端中启动 VSCode,例如在 iTerm2 / Windows Terminal 中执行
code . - 次选:在
settings.json中用terminal.integrated.env.linux(或对应平台字段)静态补全关键变量,但注意修改后需关闭并新建终端才生效 - 别依赖“全局环境变量插件”——它们只对部分语言扩展(如 Python 插件)起作用,对
cppdbg、node调试器完全无效
真正容易被忽略的点是:C++ 的 environment 数组结构、跨平台 PATH 拼接分隔符差异、以及 VSCode 启动源头对插值变量的可用性影响。这三个地方出错,调试器连进程都启不起来,更别说读环境变量了。











