我有一个基于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 工具已经更新了。我已经更新了,我们会看到它有什么不同。
您所谈论的问题可能与 $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”。
检查所有这些,然后我希望您的问题能够得到解决,如果有进一步的澄清,请告诉我。