一、launch.json 常见配置项
在 Visual Studio Code (VSCode) 中,launch.json 文件用于配置调试器的行为。这个文件包含了一系列的参数,用来控制调试会话的细节,如程序路径、调试器类型、环境变量、调试设置等。
launch.json 文件的配置项比较多,下面我会列出常用的配置项,并附上一些可能的值以及它们的功能。
launch.json 配置项通常可以分为以下几类:
-
version- 类型:字符串
- 描述:指定
launch.json文件的版本。 - 示例:
"version": "0.2.0"
-
configurations- 类型:数组
- 描述:调试配置的数组,每个配置项对应一个调试会话。
- 示例:
"configurations": [ { // 配置项 } ]
-
调试配置项 每个调试配置项都可以包含多个子项,用来控制具体的调试行为。以下是常见的调试配置项:
1. name
- 类型:字符串
- 描述:该配置的名称,会显示在 VSCode 的调试面板中,帮助你区分不同的调试配置。
- 示例:
"name": "C++: g++ 调试"
2. type
- 类型:字符串
- 描述:指定调试器的类型,决定了使用哪种调试工具。常见的类型有:
"cppdbg":用于 C/C++ 程序的调试。"node":用于 Node.js 程序的调试。"python":用于 Python 程序的调试。"chrome":用于前端 JavaScript 程序的调试(使用 Chrome 浏览器)。
- 示例:
"type": "cppdbg"
3. request
- 类型:字符串
- 描述:指定调试请求的类型,有两个主要选项:
"launch":启动并调试程序。"attach":附加到已运行的程序(用于远程调试或在程序已经运行的情况下调试)。
- 示例:
"request": "launch"
4. program
- 类型:字符串
- 描述:指定要调试的程序的路径。对于 C/C++ 程序,通常是编译后生成的可执行文件。
- 示例:
"program": "${workspaceRoot}/${fileBasenameNoExtension}.exe"
5. args
- 类型:数组
- 描述:传递给调试程序的命令行参数。
- 示例:
"args": ["arg1", "arg2"]
6. stopAtEntry
- 类型:布尔值
- 描述:指定是否在程序的入口处(如
main())停止。默认值为false。 - 示例:
"stopAtEntry": true
7. cwd (Current Working Directory)
- 类型:字符串
- 描述:指定调试会话的当前工作目录。如果不指定,默认使用项目的根目录。
- 示例:
"cwd": "${workspaceRoot}"
8. env
- 类型:对象
- 描述:为调试会话设置环境变量。
- 示例:
"env": { "MY_VAR": "value", "NODE_ENV": "development" }
9. externalConsole
- 类型:布尔值
- 描述:指定是否在外部控制台中运行程序。默认值是
false,即在 VSCode 内部终端中运行。 - 示例:
"externalConsole": true
10. preLaunchTask
- 类型:字符串
- 描述:指定在启动调试之前运行的任务名称。例如,可以用来在调试前编译代码。
- 示例:
"preLaunchTask": "build"
11. postDebugTask
- 类型:字符串
- 描述:指定调试会话结束后需要运行的任务。
- 示例:
"postDebugTask": "cleanup"
12. miDebuggerPath
- 类型:字符串
- 描述:指定调试器的路径(特别是 GDB 和 LLDB 等调试工具)。
- 示例:
"miDebuggerPath": "/usr/bin/gdb.exe"
13. MIMode
- 类型:字符串
- 描述:指定使用的调试器模式。常见的有:
"gdb":使用 GDB 调试器。"lldb":使用 LLDB 调试器。
- 示例:
"MIMode": "gdb"
14. setupCommands
- 类型:数组
- 描述:指定调试器启动时执行的命令,例如启用调试器的某些特性或设置断点。
- 示例:
"setupCommands": [ { "description": "Enable pretty printing", "text": "-enable-pretty-printing", "ignoreFailures": true } ]
15. miDebuggerArgs
- 类型:字符串
- 描述:传递给调试器的额外命令行参数。
- 示例:
"miDebuggerArgs": "--args"
16. sourceFileMap
- 类型:对象
- 描述:将源文件路径映射到调试会话中。用于调试时源代码位置与当前目录不一致的情况。
- 示例:
"sourceFileMap": { "/usr/src/app": "${workspaceFolder}" }
17. windows
- 类型:对象
- 描述:为 Windows 平台设置特定的调试配置。它可以包含一些与 Windows 特性相关的设置。
- 示例:
"windows": { "program": "C:\\path\\to\\your\\program.exe" }
完整示例
以下是一个完整的 launch.json 配置示例,演示了如何配置 C++ 程序的调试:
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "cppdbg", // 配置类型,这里只能为cppdbg
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"program": "${workspaceRoot}/${fileBasenameNoExtension}.exe",// 将要进行调试的程序的路径
"args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false
"cwd": "${workspaceRoot}",// 调试程序时的工作目录,一般为${workspaceRoot}即代码所在目录
"environment": [],
"externalConsole": false,// 调试时是否显示控制台窗口,true显示控制台, 默认值是 false,即在 VSCode 内部终端中运行
"MIMode": "gdb", //指定使用的调试器模式
"miDebuggerPath": "D:\\Asoftware\\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\\mingw64\\bin\\gdb.exe",// 注意这里要与MinGw的路径对应, 指定调试器的路径(特别是 GDB 和 LLDB 等调试工具)。
"preLaunchTask": "build", // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
二、tasks.json 常见配置项
在 Visual Studio Code (VSCode) 中,tasks.json 文件用于定义和配置任务(例如编译、构建、清理等任务),并将这些任务与快捷键、菜单项或调试任务关联。通过配置 tasks.json 文件,开发者可以在 VSCode 内部自动化常见任务。
以下是 tasks.json 文件中常见的配置项和参数的详细列表,并且按照与你要求的格式进行描述。
tasks.json 文件的配置项也可以分为几个部分。主要分为:
1. version
- 类型:字符串
- 描述:指定
tasks.json文件的版本。 - 示例:
"version": "2.0.0"
2. tasks
- 类型:数组
- 描述:定义具体任务的数组,每个任务对应一个命令或动作。
tasks数组中每个对象都是一个任务配置。 - 示例:
"tasks": [ { // 配置项 } ]
3. 任务配置项
每个任务配置项用于描述任务的行为,以下是常见的任务配置项。
1. label
- 类型:字符串
- 描述:任务的名称,会在任务列表中显示,用于识别和触发任务。
- 示例:
"label": "Build C++ Program"
2. type
- 类型:字符串
- 描述:指定任务类型,常见的有:
"shell":运行 shell 命令(例如 Bash)。"process":直接运行可执行程序。"npm":运行 npm 脚本。
- 示例:
"type": "shell"
3. command
- 类型:字符串
- 描述:任务的执行命令,通常是一个可执行文件路径或者 shell 命令。
- 示例:
"command": "g++"
4. args
- 类型:数组
- 描述:传递给命令的参数列表。
- 示例:
"args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"]
5. group
- 类型:对象
- 描述:任务分组,通常用于将任务归类,例如构建任务、清理任务等。它可以包含两个属性:
kind:任务的种类(例如"build"、"test"等)。isDefault:是否为默认任务(布尔值)。如果设置为true,按快捷键Ctrl+Shift+B会运行此任务。
- 示例:
"group": { "kind": "build", "isDefault": true }
6. problemMatcher
- 类型:数组
- 描述:与任务关联的错误匹配器。用于将任务执行后的输出与错误报告相匹配,并在编辑器中高亮显示错误。常见的匹配器有:
"$gcc":用于 GCC 编译器的错误输出。"$tsc":用于 TypeScript 编译器的错误输出。
- 示例:
"problemMatcher": ["$gcc"]
7. isBackground
- 类型:布尔值
- 描述:指定任务是否为后台任务。当设置为
true时,任务不会在 VSCode 中占用前台控制台。 - 示例:
"isBackground": true
8. presentation
- 类型:对象
- 描述:任务执行时的表现方式。可以包含以下配置项:
reveal:指定任务完成时是否在 VSCode 中显示终端(可选值:"always"、"silent"、"never")。focus:是否在任务开始时聚焦终端。panel:是否使用一个新的面板显示任务输出(可选值:"shared"、"new"、"dedicated")。
- 示例:
"presentation": { "reveal": "always", "focus": false, "panel": "new" }
9. windows, linux, osx
- 类型:对象
- 描述:平台特定的任务配置,可以针对不同操作系统提供不同的命令和参数。例如,如果在 Windows 上运行任务,你可能需要指定不同的命令或路径。
- 示例:
"windows": { "command": "C:\\MinGW\\bin\\g++.exe" }
10. cwd
- 类型:字符串
- 描述:指定任务的当前工作目录。如果不指定,默认会使用 VSCode 工作空间的根目录。
- 示例:
"cwd": "${workspaceFolder}"
11. env
- 类型:对象
- 描述:为任务设置环境变量。
- 示例:
"env": { "MY_VAR": "value", "NODE_ENV": "development" }
12. dependsOn
- 类型:数组
- 描述:指定此任务依赖的其他任务,任务会按顺序执行。你可以定义一个任务依赖多个任务。
- 示例:
"dependsOn": ["build", "test"]
13. runOptions
- 类型:对象
- 描述:定义任务运行时的选项,通常用于处理任务的生命周期(例如是否等待任务完成、是否并行执行)。
- 示例:
"runOptions": { "waitForAll": true }
14. timeout
- 类型:整数
- 描述:指定任务的超时时间,单位为毫秒。超过这个时间任务会被强制停止。
- 示例:
"timeout": 30000
完整示例
以下是一个完整的 tasks.json 配置示例,演示如何配置 C++ 程序的编译任务:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C/C++: g++.exe 生成活动文件",
"command": "D:\\Asoftware\\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared",
"showReuseMessage": true,
"clear": false
},
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
},
{
"type": "cppbuild",
"label": "C/C++: cl.exe 生成活动文件",
"command": "cl.exe",
"args": [
"/Zi",
"/EHsc",
"/nologo",
"/Fe${fileDirname}\\${fileBasenameNoExtension}.exe",
"${file}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$msCompile"
],
"group": "build",
"detail": "编译器: cl.exe"
}
]
}
三、问题记录
1.问题1:终端进程“D:\Asoftware\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\mingw64\bin\g++.exe '-g', 'D:\Study\Project\VScode\C++\.vscode\launch.json', '-o', 'launch.exe'”已终止,退出代码: 1。 终端将被任务重用,按任意键关闭。
分析:
g++编译命令中的输入文件错误:错误信息表明,g++在尝试编译launch.json文件,而不是 C++ 源代码文件。- 可能的原因:你可能在 VSCode 中打开了
launch.json文件,而不是 C++ 文件,导致 VSCode 自动将launch.json作为任务参数传递给了g++编译命令。实际上,g++需要的是 C++ 源文件(例如.cpp文件),而不是配置文件(.json)。
解决:
1. 确保你正在编辑 .cpp 文件
- 确保在编译时,你已经打开并编辑了一个 C++ 源代码文件(如
main.cpp),而不是.json配置文件。如果当前编辑的是launch.json文件,VSCode 会将其路径传递给g++,导致编译错误。 - 在运行编译任务之前,确保你编辑的文件是 C++ 源代码文件。
2. 检查调试配置 (launch.json)
在 launch.json 中,你需要确保配置中的 program 字段正确指向你要调试的可执行文件,而不是 launch.json 配置文件。通常,program 字段应该指向编译后的可执行文件。
3. 检查任务调用的文件
在 tasks.json 文件中,确保 g++ 编译任务的 args 中正确指向的是 .cpp 文件,而不是配置文件(如 launch.json)
2.问题2:在资源管理器窗口明明已经存在.exe文件,仍然出现弹窗:launch:program 'D:\Study\Project\VScode\C++\ClassTest.exe' does not exist

解决:查看launch.json和task.json文件中的路径是否设置一致

1万+

被折叠的 条评论
为什么被折叠?



