记录小白C++学习之路--熟悉C++ VScode的json配置文件篇

一、launch.json 常见配置项

在 Visual Studio Code (VSCode) 中,launch.json 文件用于配置调试器的行为。这个文件包含了一系列的参数,用来控制调试会话的细节,如程序路径、调试器类型、环境变量、调试设置等。

launch.json 文件的配置项比较多,下面我会列出常用的配置项,并附上一些可能的值以及它们的功能。

launch.json 配置项通常可以分为以下几类:

  1. version

    • 类型:字符串
    • 描述:指定 launch.json 文件的版本。
    • 示例
      "version": "0.2.0"
      
  2. configurations

    • 类型:数组
    • 描述:调试配置的数组,每个配置项对应一个调试会话。
    • 示例
      "configurations": [
        {
          // 配置项
        }
      ]
      
  3. 调试配置项 每个调试配置项都可以包含多个子项,用来控制具体的调试行为。以下是常见的调试配置项:


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文件中的路径是否设置一致

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值