修改 launch.json 的 args 字段必须为 json 字符串数组,每个元素为独立参数,含空格路径无需手动加引号,双引号需反斜杠转义,环境变量不展开,需注意各语言参数接收位置及 program/cwd 路径正确性。

直接改 launch.json 里的 args 字段,必须是数组,不能是字符串——这是唯一可靠方式。
args 必须写成 JSON 字符串数组,不是空格分隔的字符串
常见错误是把参数写成 "args": "--port 3000" 或 "args": ["--port 3000"]。前者 JSON 解析失败;后者把整个带空格的字符串当做一个参数传给程序,等价于终端里执行 your_app "--port 3000",而不是 your_app --port 3000。
-
args值必须是数组,每个元素对应一个独立参数:"args": ["--port", "3000", "--debug"] - 含空格的值(如路径)直接写,不用手动加引号:
"args": ["--input", "./data/my file.txt"],VSCode 会自动处理转义 - 参数本身含双引号(比如传 JSON 字符串),需用反斜杠转义:
"args": ["--config", "{\"log\":true}"] - 环境变量(如
${env:HOME})在args中不展开,要传路径请先用tasks.json预处理,或改用env字段配环境变量 + 代码里拼接
不同语言对 args 的接收位置有差异,别只看第一个参数
args 总是传给目标程序的 os.Args[1:](Go)、sys.argv[1:](Python)、String[] args(Java 主方法)、process.argv[2:](Node.js)。但 Node.js 容易踩坑:如果你用 npm run dev 启动,args 实际传给了 npm,不是你的脚本。
- Node.js:确保
type是node或pwa-node,且program指向 JS/TS 文件,runtimeExecutable未指向npm或ts-node(除非你明确配置了它) - Java:
args直接映射到main(String[] args)的数组,无需额外处理;确认mainClass正确,否则参数根本不会进程序 - Go:
dlv默认不继承终端 stdin,如果参数涉及交互(如--confirm),需设"console": "integratedTerminal" - Rust:用
cargo run调试时,args会被cargo拦截;应改用"cargo": { "args": ["run", "--"] },真实参数放在--后面
参数没生效?先检查 program 和 cwd 是否指向正确位置
VSCode 不会校验 args 内容是否合法,但若 program 路径不存在、或 cwd 设错导致相对路径解析失败,程序可能静默退出或报错,让你误以为参数没传进去。
-
program必须是相对于${workspaceFolder}的有效路径,例如"./src/main.py",不能是"main.py"(没引号)或绝对路径(如/home/user/app.js) -
cwd推荐显式设为"${workspaceFolder}",尤其当代码里用open("config.json")或require("./lib")时,否则文件找不到 - 调试前加一行日志验证:Python 写
print(sys.argv),Node.js 写console.log(process.argv),Go 写fmt.Println(os.Args),看输出是否符合预期 - 如果用了
preLaunchTask(比如编译),确保任务成功完成,否则运行的是旧二进制,参数自然无效
最常被忽略的一点:launch.json 的 configurations 数组不能为空,且每个配置必须有 type、request、name —— 少一个字段,VSCode 就拒绝加载该配置,args 再对也没用。











