launch.json是vscode调试配置核心文件,首次调试时自动生成于.vscode/目录,为json数组结构,含version、configurations等必填字段,支持多配置共存与语言特化设置。

VSCode 的 launch.json 是调试配置的核心文件,它告诉 VSCode 如何启动调试器、加载哪些程序、传什么参数、是否附加到进程等。配置写对了,调试才顺;写错了,常报 “Could not find program” 或 “No configuration” 这类错误。
launch.json 从哪来?基本结构长什么样
这个文件默认不存在,首次点击「运行 → 启动调试」或按 Ctrl+Shift+D 后点齿轮图标,VSCode 会自动在项目根目录的 .vscode/launch.json 下生成模板。它本质是一个 JSON 数组,每个对象代表一个可选的调试配置(即“启动配置”),通过 name 字段区分。
最小可用配置示例(以 node.js 为例):
{ "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Launch Program", "skipFiles": ["<node_internals>/**"], "program": "${workspaceFolder}/index.js" } ] }
关键字段说明:
一款非常包包、衣服、鞋子类网站,页面干净清洁、一目了然,mttshop打造精致、简单、易用、免费的商城。 系统要求:IIS5.1以后,必须安装.net 3.5 安装步骤: 1、下载完成后,直接解压文件mttshop.rar 2、附加数据库:解压后的可以找一个叫db的文件夹,解压后直接附加就可以,支持SQL 2000、2005、2008 3、配置web.config文件,找到key=&qu
0 - version:固定为
"0.2.0",是 VSCode 调试协议版本,别改 - configurations:必填数组,每个对象是一个调试入口
- type:调试器类型,如
"node"、"python"、"cppdbg",需对应已安装的扩展 - request:取值为
"launch"(启动新进程)或"attach"(附加到已有进程) - name:调试启动项的显示名,在调试侧边栏下拉菜单中可见
- program:要调试的主文件路径(
launch模式必需)
常见调试场景对应的关键配置项
不同语言和需求,核心字段差异明显。以下是最常遇到的几类:
- Python 脚本调试:确保装了 Python 扩展;
type: "python";module可代替program运行包(如"module": "http.server");console设为"integratedTerminal"可在终端中交互输入 - 前端项目(chrome 调试):装好 Debugger for Chrome 扩展;
type: "pwa-chrome";url指向本地服务地址(如"http://localhost:3000");webRoot告诉调试器源码根目录,用于断点映射 - 附加到已运行的 Node 进程:设
request: "attach";port对应 Node 启动时加的--inspect=9229;address可选填 IP(默认 localhost) - 带参数或环境变量启动:用
args数组传命令行参数(如["--port", "4000"]);用env对象设环境变量(如{"NODE_ENV": "development"})
实用技巧与易错点提醒
很多问题不是配置不会写,而是细节没注意:
- 路径必须用变量表达:硬写绝对路径(如
"C:/project/index.js")会导致协作失效;统一用${workspaceFolder}、${file}、${fileBasenameNoExtension}等预定义变量 - 多个配置共存没问题:一个
launch.json可同时定义 “启动后端”、“启动前端”、“Attach 到 docker 容器” 等多个configuration,切换靠顶部下拉菜单 - 调试器不识别 type?先检查扩展:比如
"type": "go"报错,大概率是没装 Go 扩展;"type": "pwa-msedge"需装 Edge DevTools 扩展 - 断点不命中?看 sourcemap 和 webRoot:vue/react 构建后代码被压缩或转译,必须配对
sourceMaps: true和正确的webRoot,否则断点打在打包后文件上无效
基本上就这些。launch.json 不复杂但容易忽略变量和扩展依赖,配一次、理清逻辑,后续调试就能省掉大半手动操作。