问题遇到的现象和发生背景
在linux环境下使用vscode1.81.0,写了一个存在编译警告信息的测试程序hello.cpp,在vscode中配置了一个编译生成任务文件tasks.json,在其中用了自定义的问题匹配器,关于该问题匹配器问题输出面板输出内容不符合笔者的预期。
遇到的现象和发生背景,请写出第一个错误信息
对应cpp文件在编译时在vscode中会有输出警告信息:
home/administrator/E_DRIVER/vcwork/test/hello.cpp: In function ‘int main()’:
/home/administrator/E_DRIVER/vcwork/test/hello.cpp:9:15: warning: ‘i’ may be used uninitialized in this function [-Wmaybe-uninitialized]
printf("hello,world!%d\n",i);
~~~~~~^~~~~~~~~~~~~~~~~~~~~~
生成已完成,但收到警告。
在问题面板中输出截图如下:
针对该输出有两个疑问:
1、警告信息中的“[-Wmaybe-uninitialized]”怎么不见了?
2、面板中的code部分怎么没有显示代码?
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
hello.cpp代码如下:
#include <stdio.h>
int main()
{
int loop;
int i,j;
for(loop=0;loop<5;loop++)
printf("hello,world!%d\n",i);
i++;
}
tasks.json配置内如下:
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ 生成活动文件",
"command": "/usr/bin/g++",
"args": [
"-fdiagnostics-color=always",
"-g",
"-W",
"${workspaceFolder}/hello.cpp",
"${workspaceFolder}/set.cpp",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher":
[
//"$gcc",
{
"owner":"myCompile",
"severity": "error",
"fileLocation":"absolute",
"pattern":
{
//"regexp":"^(.*):(\\d+):(\\d+):\\s+(warning|error):(.*\\])\\s+(.*)$",
"regexp":"^(.*):(\\d+):(\\d+):\\s+(warning|error):(.*)\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5,
"code": 6
}
}
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "编译器: /usr/bin/g++"
}
]
}
运行结果及详细报错内容
在问题面板中输出截图如下:
针对该输出有两个疑问:
1、警告信息中的“[-Wmaybe-uninitialized]”怎么不见了?
2、面板中的code部分怎么没有显示代码?
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
1、在python中正则表达式解析时,消息部分是含有“[-Wmaybe-uninitialized]”的字符串,code会解析为代码的内容;
2、当不用自定义问题匹配器而用"$gcc"问题匹配器时可以在信息中看到“[-Wmaybe-uninitialized]”的字符串,但code还是没有内容;
3、当将正则表达式替换为:
"regexp":"^(.*):(\\d+):(\\d+):\\s+(warning|error):(.*\\])\\s+(.*)$
时,vscode的问题面板没有输出任何警告信息,应该是正则表达式解析失败了,但在python中该表达式可以正常解析。