记载小白C++学习之路--熟悉C++ VScode的json配置文件篇
一、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
https://i-blog.csdnimg.cn/direct/1b2104c5e9e1480592631b14209ece63.png
解决:检察launch.json和task.json文件中的路径是否设置一致
https://i-blog.csdnimg.cn/direct/4aed7d577dfe4641a5e7215a0618bd11.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]