launch.json通过preLaunchTask字段调用tasks.json中定义的任务,实现调试前自动执行构建等操作。例如C++项目调试前自动编译,TypeScript项目调试前自动编译生成JS文件,确保运行最新代码,提升调试效率与可靠性。

在使用 Visual Studio Code 进行开发时,launch.json 和 tasks.json 是两个关键的配置文件,它们分别负责调试启动和任务执行。理解它们之间的联动机制,能显著提升调试效率,尤其是在需要预编译、构建或自定义执行流程的项目中。
launch.json:定义调试会话
launch.json 位于 .vscode 目录下,用于配置调试器如何启动程序。它指定程序入口、运行环境、参数、调试类型(如 node.js、Python、C++ 等)以及是否附加到进程等。
常见字段包括:
- name:调试配置的名称
- type:调试器类型(如 "node"、"cppdbg")
- request:"launch" 或 "attach"
- program:要运行的主程序路径
- preLaunchTask:在调试开始前自动执行的任务
其中,preLaunchTask 是实现与 tasks.json 联动的核心字段。
tasks.json:定义可执行任务
tasks.json 用于定义项目中的自定义任务,比如编译代码、打包资源、运行测试等。这些任务可以被命令面板调用,也可以被 launch.json 自动触发。
一个典型任务包含:
- label:任务名称,供其他配置引用
- type:任务类型(如 "shell"、"process")
- command:要执行的命令(如 gcc、npm、make)
- args:传递给命令的参数
- group:指定任务组,如 "build" 表示构建任务
- dependsOn:依赖的其他任务
例如,你可以定义一个使用 g++ 编译 C++ 文件的任务,并将其 label 设置为 "build"。
preLaunchTask 实现自动构建调试
当你在 launch.json 中设置 preLaunchTask 时,VS Code 会在每次启动调试前自动运行对应的任务。这非常适合需要先编译再调试的场景。
例如:
{
"version": "0.2.0",
"configurations": [
{
"name": "C++ Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/out/app",
"preLaunchTask": "build"
}
]
}
此时,VS Code 会查找 tasks.json 中 label 为 "build" 的任务并执行。如果任务成功完成,调试器才会启动。
若任务失败(如编译出错),调试将中止,避免运行陈旧或错误的二进制文件。
实际应用场景举例
假设你正在开发一个 TypeScript 项目:
- 源码在 src/ 目录下
- 需先通过 tsc 编译到 dist/
- 然后调试生成的 JS 文件
你可以:
- 在 tasks.json 中定义一个名为 "tsc: build" 的任务,运行 tsc --build
- 在 launch.json 中设置 preLaunchTask 为该任务名
- 调试时自动编译并启动 Node.js 调试器
这样无需手动编译,一键 F5 即可完成“构建 + 调试”全流程。
基本上就这些。掌握 launch.json 与 tasks.json 的配合,能让 VS Code 的调试体验更自动化、更可靠。关键是确保 preLaunchTask 的 label 与 tasks.json 中的 label 完全一致,并正确处理任务的输出与错误。不复杂但容易忽略。










