launch.json是VSCode调试启动配置文件,首次通过齿轮图标或命令自动生成于.vscode/目录,必须包含version和configurations字段,后者为至少含type、request、name的非空数组,program须指向工作区根目录下真实可执行文件。

launch.json 是 VSCode 的调试启动配置文件,不是“运行脚本”或“构建脚本”,它只在按 F5 或点击「开始调试」时生效;写错最常见报错是 Could not find program 或 No configuration。
launch.json 文件从哪来、结构长什么样
它默认不存在,首次点「运行和调试」面板右上角齿轮图标,或按 Ctrl+Shift+P 输入 Debug: Open launch.json,VSCode 就会自动生成 .vscode/launch.json。生成后是个标准 JSON 文件,顶层必须有 version 和 configurations 字段:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}
注意:configurations 是数组,可同时存多个配置(比如一个跑测试、一个跑主程序),但每次只选一个启动。
type 和 request 必须配对正确
type 决定用哪个调试扩展,request 决定调试模式,二者不匹配就直接失败:
-
"type": "python"→"request": "launch"或"attach"都行,但"attach"需额外配port和host -
"type": "cppdbg"→"request": "launch"才能启动可执行文件;若写成"attach"却没提前运行进程,调试器会卡住或报Connection refused -
"type": "msedge"或"chrome"→"request": "launch"会自动拉起浏览器;"request": "attach"要求浏览器已用--remote-debugging-port=9222启动
常见错误:给 Python 配置写了 "type": "node",或给 C++ 配置漏了 preLaunchTask 导致 program 指向的 .out 文件根本不存在。
program、cwd、args 这三个路径参数最容易出错
它们共同决定「程序在哪跑、用什么跑、带什么参数跑」,顺序和变量写法稍错就找不到入口或读不到资源:
-
program必须指向可执行文件或脚本,不能是目录;Python 常用"${file}"(当前打开的 .py 文件),C++ 常用"${workspaceFolder}/build/app.out" -
cwd(current working directory)影响相对路径读取,比如代码里写open("data.csv"),就得确保cwd指向含该文件的目录;不设时默认为${workspaceFolder},常导致文件找不到 -
args是字符串数组,不是空格拼接的单字符串;错写成"--epochs 10"会被当做一个参数,正确是["--epochs", "10"]
特别注意:${fileDirname} 和 ${workspaceFolder} 看似相似,但前者是当前编辑文件所在目录,后者是整个项目根目录——调试单文件脚本时用前者更安全。
preLaunchTask 不只是“编译前执行”,它和 tasks.json 强绑定
如果你在 launch.json 里写了 "preLaunchTask": "build",VSCode 就会去 .vscode/tasks.json 里找 label: "build" 的任务;找不到就报错 Task not found,不会自动忽略。
常见疏漏:
- tasks.json 里任务
label写成了"Build"(首字母大写),而 launch.json 写的是"build",大小写不一致就匹配失败 - C++ 项目中
preLaunchTask没配,但program指向的是未生成的app.out,结果每次调试都提示Could not find program - Python 项目误加
preLaunchTask,但没配 tasks.json,反而拖慢启动速度且无实际作用
真正需要它的场景其实很明确:C/C++ 编译、Go go build、.NET dotnet build ——这些语言没有解释器直跑机制,必须先产出二进制再调试。











