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

打印 上一主题 下一主题

主题 1004|帖子 1004|积分 3012

一、launch.json 常见配置项

在 Visual Studio Code (VSCode) 中,launch.json 文件用于配置调试器的活动。这个文件包含了一系列的参数,用来控制调试会话的细节,如步调路径、调试器范例、环境变量、调试设置等。
launch.json 文件的配置项比力多,下面我会列出常用的配置项,并附上一些大概的值以及它们的功能。
launch.json 配置项通常可以分为以下几类:

  • version

    • 范例:字符串
    • 描述:指定 launch.json 文件的版本。
    • 示例
      1. "version": "0.2.0"
      复制代码

  • configurations

    • 范例:数组
    • 描述:调试配置的数组,每个配置项对应一个调试会话。
    • 示例
      1. "configurations": [
      2.   {
      3.     // 配置项
      4.   }
      5. ]
      复制代码

  • 调试配置项 每个调试配置项都可以包含多个子项,用来控制详细的调试活动。以下是常见的调试配置项:

1. name



  • 范例:字符串
  • 描述:该配置的名称,会显示在 VSCode 的调试面板中,资助你区分不同的调试配置。
  • 示例
    1. "name": "C++: g++ 调试"
    复制代码
2. type



  • 范例:字符串
  • 描述:指定调试器的范例,决定了使用哪种调试工具。常见的范例有:

    • "cppdbg":用于 C/C++ 步调的调试。
    • "node":用于 Node.js 步调的调试。
    • "python":用于 Python 步调的调试。
    • "chrome":用于前端 JavaScript 步调的调试(使用 Chrome 欣赏器)。

  • 示例
    1. "type": "cppdbg"
    复制代码
3. request



  • 范例:字符串
  • 描述:指定调试哀求的范例,有两个主要选项:

    • "launch":启动并调试步调。
    • "attach":附加到已运行的步调(用于远程调试或在步调已经运行的情况下调试)。

  • 示例
    1. "request": "launch"
    复制代码
4. program



  • 范例:字符串
  • 描述:指定要调试的步调的路径。对于 C/C++ 步调,通常是编译后生成的可执行文件。
  • 示例
    1. "program": "${workspaceRoot}/${fileBasenameNoExtension}.exe"
    复制代码
5. args



  • 范例:数组
  • 描述:传递给调试步调的命令行参数。
  • 示例
    1. "args": ["arg1", "arg2"]
    复制代码
6. stopAtEntry



  • 范例:布尔值
  • 描述:指定是否在步调的入口处(如 main())停止。默认值为 false。
  • 示例
    1. "stopAtEntry": true
    复制代码
7. cwd (Current Working Directory)



  • 范例:字符串
  • 描述:指定调试会话的当前工作目录。假如不指定,默认使用项目的根目录。
  • 示例
    1. "cwd": "${workspaceRoot}"
    复制代码
8. env



  • 范例:对象
  • 描述:为调试会话设置环境变量。
  • 示例
    1. "env": { "MY_VAR": "value", "NODE_ENV": "development" }
    复制代码
9. externalConsole



  • 范例:布尔值
  • 描述:指定是否在外部控制台中运行步调。默认值是 false,即在 VSCode 内部终端中运行。
  • 示例
    1. "externalConsole": true
    复制代码
10. preLaunchTask



  • 范例:字符串
  • 描述:指定在启动调试之前运行的使命名称。例如,可以用来在调试前编译代码。
  • 示例
    1. "preLaunchTask": "build"
    复制代码
11. postDebugTask



  • 范例:字符串
  • 描述:指定调试会话结束后需要运行的使命。
  • 示例
    1. "postDebugTask": "cleanup"
    复制代码
12. miDebuggerPath



  • 范例:字符串
  • 描述:指定调试器的路径(特别是 GDB 和 LLDB 等调试工具)。
  • 示例
    1. "miDebuggerPath": "/usr/bin/gdb.exe"
    复制代码
13. MIMode



  • 范例:字符串
  • 描述:指定使用的调试器模式。常见的有:

    • "gdb":使用 GDB 调试器。
    • "lldb":使用 LLDB 调试器。

  • 示例
    1. "MIMode": "gdb"
    复制代码
14. setupCommands



  • 范例:数组
  • 描述:指定调试器启动时执行的命令,例如启用调试器的某些特性或设置断点。
  • 示例
    1. "setupCommands": [ { "description": "Enable pretty printing", "text": "-enable-pretty-printing", "ignoreFailures": true } ]
    复制代码
15. miDebuggerArgs



  • 范例:字符串
  • 描述:传递给调试器的额外命令行参数。
  • 示例
    1. "miDebuggerArgs": "--args"
    复制代码
16. sourceFileMap



  • 范例:对象
  • 描述:将源文件路径映射到调试会话中。用于调试时源代码位置与当前目录不一致的情况。
  • 示例
    1. "sourceFileMap": { "/usr/src/app": "${workspaceFolder}" }
    复制代码
17. windows



  • 范例:对象
  • 描述:为 Windows 平台设置特定的调试配置。它可以包含一些与 Windows 特性相关的设置。
  • 示例
    1. "windows": { "program": "C:\\path\\to\\your\\program.exe" }
    复制代码
完整示例

以下是一个完整的 launch.json 配置示例,演示了如何配置 C++ 步调的调试:
  1. {    "version": "0.2.0"
  2. ,    "configurations": [        {            "name": "(gdb) Launch",        // 配置名称,将会在启动配置的下拉菜单中显示            "type": "cppdbg"
  3. ,                 // 配置范例,这里只能为cppdbg            "request": "launch"
  4. ,        // 哀求配置范例,可以为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 文件的版本。
  • 示例
    1. "version": "2.0.0"
    复制代码
2. tasks



  • 范例:数组
  • 描述:定义详细使命的数组,每个使命对应一个命令或动作。tasks 数组中每个对象都是一个使命配置。
  • 示例
    1. "tasks": [ { // 配置项 } ]
    复制代码

3. 使命配置项

每个使命配置项用于描述使命的活动,以下是常见的使命配置项。

1. label



  • 范例:字符串
  • 描述:使命的名称,会在使命列表中显示,用于辨认和触发使命。
  • 示例
    1. "label": "Build C++ Program"
    复制代码
2. type



  • 范例:字符串
  • 描述:指定使命范例,常见的有:

    • "shell":运行 shell 命令(例如 Bash)。
    • "process":直接运行可执行步调。
    • "npm":运行 npm 脚本。

  • 示例
    1. "type": "shell"
    复制代码
3. command



  • 范例:字符串
  • 描述:使命的执行命令,通常是一个可执行文件路径或者 shell 命令。
  • 示例
    1. "command": "g++"
    复制代码
4. args



  • 范例:数组
  • 描述:传递给命令的参数列表。
  • 示例
    1. "args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"]
    复制代码
5. group



  • 范例:对象
  • 描述:使命分组,通常用于将使命归类,例如构建使命、清算使命等。它可以包含两个属性:

    • kind:使命的种类(例如 "build"、"test" 等)。
    • isDefault:是否为默认使命(布尔值)。假如设置为 true,按快捷键 Ctrl+Shift+B 会运行此使命。

  • 示例
    1. "group": { "kind": "build", "isDefault": true }
    复制代码
6. problemMatcher



  • 范例:数组
  • 描述:与使命关联的错误匹配器。用于将使命执行后的输出与错误报告相匹配,并在编辑器中高亮显示错误。常见的匹配器有:

    • "$gcc":用于 GCC 编译器的错误输出。
    • "$tsc":用于 TypeScript 编译器的错误输出。

  • 示例
    1. "problemMatcher": ["$gcc"]
    复制代码
7. isBackground



  • 范例:布尔值
  • 描述:指定使命是否为后台使命。当设置为 true 时,使命不会在 VSCode 中占用前台控制台。
  • 示例
    1. "isBackground": true
    复制代码
8. presentation



  • 范例:对象
  • 描述:使命执行时的表现方式。可以包含以下配置项:

    • reveal:指定使命完成时是否在 VSCode 中显示终端(可选值:"always"、"silent"、"never")。
    • focus:是否在使命开始时聚焦终端。
    • panel:是否使用一个新的面板显示使命输出(可选值:"shared"、"new"、"dedicated")。

  • 示例
    1. "presentation": { "reveal": "always", "focus": false, "panel": "new" }
    复制代码
9. windows, linux, osx



  • 范例:对象
  • 描述:平台特定的使命配置,可以针对不同操纵体系提供不同的命令和参数。例如,假如在 Windows 上运行使命,你大概需要指定不同的命令或路径。
  • 示例
    1. "windows": { "command": "C:\\MinGW\\bin\\g++.exe" }
    复制代码
10. cwd



  • 范例:字符串
  • 描述:指定使命的当前工作目录。假如不指定,默认会使用 VSCode 工作空间的根目录。
  • 示例
    1. "cwd": "${workspaceFolder}"
    复制代码
11. env



  • 范例:对象
  • 描述:为使命设置环境变量。
  • 示例
    1. "env": { "MY_VAR": "value", "NODE_ENV": "development" }
    复制代码
12. dependsOn



  • 范例:数组
  • 描述:指定此使命依靠的其他使命,使命会按次序执行。你可以定义一个使命依靠多个使命。
  • 示例
    1. "dependsOn": ["build", "test"]
    复制代码
13. runOptions



  • 范例:对象
  • 描述:定义使命运行时的选项,通常用于处理使命的生命周期(例如是否期待使命完成、是否并行执行)。
  • 示例
    1. "runOptions": { "waitForAll": true }
    复制代码
14. timeout



  • 范例:整数
  • 描述:指定使命的超时时间,单位为毫秒。凌驾这个时间使命会被逼迫停止。
  • 示例
    1. "timeout": 30000
    复制代码

完整示例

以下是一个完整的 tasks.json 配置示例,演示如何配置 C++ 步调的编译使命:
  1. {
  2.     "version": "2.0.0",
  3.     "tasks": [
  4.         {
  5.             "type": "shell",
  6.             "label": "C/C++: g++.exe 生成活动文件",
  7.             "command": "D:\\Asoftware\\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\\mingw64\\bin\\g++.exe",
  8.             "args": [
  9.                 "-fdiagnostics-color=always",
  10.                 "-g",
  11.                 "${file}",
  12.                 "-o",
  13.                 "${fileDirname}\\${fileBasenameNoExtension}.exe"
  14.             ],
  15.             "options": {
  16.                 "cwd": "${fileDirname}"
  17.             },
  18.             "problemMatcher": [
  19.                 "$gcc"
  20.             ],
  21.             "presentation": {
  22.                 "echo": true,
  23.                 "reveal": "always",
  24.                 "focus": false,
  25.                 "panel": "shared",
  26.                 "showReuseMessage": true,
  27.                 "clear": false
  28.             },
  29.             "group": {
  30.                 "kind": "build",
  31.                 "isDefault": true
  32.             },
  33.             "detail": "调试器生成的任务。"
  34.         },
  35.         {
  36.             "type": "cppbuild",
  37.             "label": "C/C++: cl.exe 生成活动文件",
  38.             "command": "cl.exe",
  39.             "args": [
  40.                 "/Zi",
  41.                 "/EHsc",
  42.                 "/nologo",
  43.                 "/Fe${fileDirname}\\${fileBasenameNoExtension}.exe",
  44.                 "${file}"
  45.             ],
  46.             "options": {
  47.                 "cwd": "${fileDirname}"
  48.             },
  49.             "problemMatcher": [
  50.                 "$msCompile"
  51.             ],
  52.             "group": "build",
  53.             "detail": "编译器: cl.exe"
  54.         }
  55.     ]
  56. }
复制代码
三、问题记载

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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表