launch.json不能手写,必须通过vscode齿轮图标自动生成,否则易遗漏env、cwd、prelaunchtask等关键字段,导致断点不触发、路径报错或模块找不到。

launch.json 不能手写,必须用齿轮图标生成
VSCode 的 launch.json 不是靠人肉填出来的——手动写九成会漏掉 env、cwd、preLaunchTask 这类隐性但关键的字段,结果就是断点不触发、require 找不到模块、console.log 完全不输出。
正确做法:按 Ctrl+Shift+D(macOS 是 Cmd+Shift+D),点左上角 ⚙️ 图标,选对应环境(比如 Node.js 或 Python),VSCode 自动创建完整结构。它保证 configurations 是非空数组、每个对象含 name/type/request 三要素,且路径、版本号等都合规。
常见错误:
- 复制别人配置后删光了
configurations,只剩{}或空文件 → 报 “No configuration” - 把生成的模板保存前改乱了缩进或逗号 → JSON 解析失败,调试面板空白
- 没装对应调试扩展(比如用
"type": "python"却没装 Python 扩展)→ 点 F5 没反应
Node.js 调试必须填对 program 和 console
program 是 Node.js 调试的命门:它必须指向一个真实存在的、可执行的 JS 文件,且路径是相对于工作区根目录的相对路径,不能是 index.js(缺引号)或 /home/user/app.js(绝对路径)。
console 字段决定日志和输入行为。设成 "internalConsole" 会导致 process.stdin 失效、console.log 不显示;必须设为 "integratedTerminal" 才能正常交互和看到输出。
典型写法:
{
"name": "Launch app",
"type": "node",
"request": "launch",
"program": "${workspaceFolder}/src/index.js",
"console": "integratedTerminal"
}
注意:
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
- TypeScript 项目别直接写
.ts文件到program—— Node.js 不认识它。要么编译后指向dist/index.js,要么用runtimeExecutable指向ts-node - Windows 下路径统一用正斜杠
/,别用反斜杠\ -
program值必须加双引号,哪怕只是"./index.js"
Python 调试卡住?先查 justMyCode 和 cwd
Python 脚本在终端能跑,但在 VSCode 里断点变空心圆、变量看不到、import 报错——大概率是 justMyCode 或 cwd 搞错了。
justMyCode 默认为 true,意思是“只调试当前工作区里的代码”,一旦你的项目依赖其他包(比如本地 src/utils.py 被 main.py 导入),它就会被过滤掉。临时改成 false 能确认是不是这个原因。
cwd 决定 open("config.yaml")、import 查找路径的行为。不设它,VSCode 可能以你当前打开的文件所在目录为起点,而不是项目根目录。必须显式写成:"cwd": "${workspaceFolder}"。
其他要点:
- 右下角 Python 解释器路径要指向虚拟环境里的
python(如venv/bin/python或venv\Scripts\python.exe) - 模块导入失败时,优先在
env里加"PYTHONPATH": "${workspaceFolder}/src",别在代码里硬改sys.path - 如果用了 FastAPI/Flask,推荐用
"module": "uvicorn"+"args",而不是填program
传参数、设环境变量、配工作目录必须一起看
args 字段不是把命令行粘贴进去就行。它必须是字符串数组,每个参数单独一项。写成 "args": ["--port 3000"] 是错的——程序只会收到一个叫 --port 3000 的参数;正确写法是 "args": ["--port", "3000"]。
env 和 cwd 不是可选项,它们和 args 共同决定程序实际运行环境:
- 含空格的路径(如
"data/my file.txt")直接写进args数组即可,VSCode 自动处理,不用额外转义 -
args里的相对路径(如-f config.yaml)会基于cwd解析,不是基于launch.json位置 -
env里设"NODE_ENV": "development"比在终端里NODE_ENV=development npm start更可靠,尤其配合preLaunchTask时
最容易忽略的是:改完 launch.json 后,必须关掉当前调试会话、重载窗口(Ctrl+Shift+P → “Developer: Reload Window”)才能生效。缓存不刷新,新配置就等于没写。










