c++ - 为什么在Visual Studio Code中将 “C/C++:”插入我的task.json文件的标签中?

标签 c++ json debugging visual-studio-code task

我正在将Visual Studio Code与MinGW-w64一起使用。这涉及创建两个文件(launch.json和tasks.json),这些文件使我可以构建和调试C++代码。我通过转到终端->配置默认生成任务...,然后选择“C / C++:g++。exe生成 Activity 文件”来选择我的task.json文件。

通常,tasks.json文件显示如下:

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "g++.exe build active file",
            "command": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build"
        }
    ]
}

但是,在最近几天中,它显示如下:
{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "C/C++: g++.exe build active file",
            "command": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build"
        }
    ]
}

当文件采用这种格式时,我将无法调试代码。相反,我收到消息“找不到任务'g++。exe构建 Activity 文件”。

唯一明显的区别是C/C++现在在g++.exe build active file行中的"label"之前。删除此标签后,便可以获取代码进行编译和/或调试。

这导致我问两个问题:首先,为什么在标签中插入了C/C++?它没有出现在用于使用Visual Studio代码设置MinGW的Microsoft文档中:https://code.visualstudio.com/docs/cpp/config-mingw

其次,如何才能从标签中永久删除C/C++,这样就不必每次都手动删除它了?我已经尝试在下拉菜单的“配置默认生成任务”中选择C / C++:g++。exe生成 Activity 文件旁边的“配置任务”;删除C/C++,然后保存task.json文件,但这似乎不会导致构建任务永久更改。

一如既往地感谢您的帮助。

最佳答案

我花了一些时间阅读cpptools扩展的源代码,然后发现了一些问题。在不同条件下,扩展名具有不同的响应

如果文件夹根目录中存在“.vscode”文件夹,则在添加调试配置时,它将仅指导创建launch.json。需要指导用户再次配置“tasks.json”。但是名称此时创建的任务的值与“preLaunchTask”的值不一致。这是此扩展程序的问题。我认为原因是初始化调试配置时未找到“.vscode”文件夹,执行扩展的代码时缺少某些条件

如果文件夹的根目录中有一个空的“.vscode”文件夹,则在初始化调试配置时将同时创建“launch.json”和“tasks.json”。这两个文件完全匹配并执行不需要任何修改

如果用户首先配置任务,则在初始化调试配置时,扩展将重新创建一个名为“g++。exe构建 Activity 文件”的任务,该任务不是以“C / C++”开头的。这当然有效,但是您可能需要删除开始时未使用的任务
这种设计是合理的,因为“C / C++:g++。exe构建 Activity 文件”实际上是cpptools中内置的任务模板(还有两个)。内置模板可以由“preLaunchTask”引用,但用户无法在“tasks.json”中看到它们
如果删除文件“tasks.json”并将“preLaunchTask”的值更改为“C:C++:g++。exe构建 Activity 文件”。它也可以使用,但这不是标准用法

关于c++ - 为什么在Visual Studio Code中将 “C/C++:”插入我的task.json文件的标签中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61281945/

相关文章:

c++ - 具有组件性能的 Entity Framework 实体

C++任何以编程方式检测POD结构的方法?

c++ - AddressSanitizer 和运行时加载动态库 -> (<unknown module>)

c++ - 创建 `std::forward` 别名 - 意外结果

visual-studio-2010 - 从PE或PDB文件中获取调试信息

java - 为什么 Jackson 的默认解串器将 Zone 设置为 UTC 而不是 Z?

javascript - 如何在 three.js 中导入 json 和渲染

php - Android 中的 JSON 和 PHP

python - 获取gdb的python接口(interface)中的所有全局变量/局部变量

debugging - Xdebug Remote Debugger 似乎跳转到随机位置