$gcc ProblemMatcher 不显示所有错误或警告

问题描述 投票:0回答:1

我有一个基于CMake的Visual Studio Code C项目,使用gcc编译。我创建了一个用于构建项目的自定义任务,并为其

$gcc
属性指定了
problemMatcher

但是,当我构建并且存在编译错误时,它永远不会显示所有错误和警告消息。很多时候它只显示第一个。有时它会显示两个或三个。如果列表中出现错误之前出现警告消息,它将始终只显示该警告,而不显示任何后续错误。

我该如何解决这个问题?我已经尝试将 VS Code 和 CMake 工具和 C/C++ 扩展更新到最新版本,在撰写此问题时为:VSCode 1.92.1,C++:v1.21.6,CMake 工具:1.18.44

这是我的

tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cmake",
            "label": "CMake: build application",
            "command": "build",
            "presentation": {
                "echo": false,
                "reveal": "always",
                "focus": false,
                "close": false,
                "panel": "dedicated",
                "revealProblems": "onProblem",
                "showReuseMessage": false,
                "clear": true
            },
            "targets": [
                "all"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "CMake build task",
            "problemMatcher": ["$gcc"]
        }
    ]
}

编辑:此问题似乎是间歇性的。如果发生这种情况,我可以重新启动 VS Code,它就会消失,至少暂时消失。

编辑 2:自从我写这篇文章以来,CMake 工具已经更新了。我已经更新了,我们会看到它有什么不同。

c visual-studio-code gcc cmake
1个回答
0
投票

您所谈论的问题可能与 $gcc issuesMatcher 如何处理输出有关。由于问题是不连续的,因此这也可能取决于 VS Code 如何缓冲输出或临时故障。

要摆脱这个问题,您可以修改 ProblemMatcher 模式,因为默认的 $gcc 可能不会始终捕获所有消息,因此最好尝试指定自定义问题匹配器,否则确保它正确解析所有行。 修改 ProblemMatcher 模式:默认的 $gcc 可能并不总是捕获所有消息,因此请尝试指定自定义问题匹配器或确保它正确解析所有行。

在你的tasks.json中,按如下方式更新问题匹配器:

我建议您将 task.json 文件更新为:


    "problemMatcher": [
        {
            "owner": "cpp",
            "fileLocation": "absolute",
            "pattern": {
                "regexp": "^(.*):(\\d+):(\\d+): (error|warning): (.*)$",
                "file": 1,
                "line": 2,
                "column": 3,
                "severity": 4,
                "message": 5
            }
        }
    ]

为了避免清除或重置终端,也为了提高所有消息的可见性,请设置“panel”:“shared”而不是“panel”:“dedicated”。

检查所有这些,然后我希望您的问题能够得到解决,如果有进一步的澄清,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.