如何在vscode中为cppcheck任务定义问题匹配器?

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

我正在为vscode设置一个“cppcheck”任务。它有效,但问题匹配器无法捕获问题。

我尝试过“$ gcc”问题匹配器以及一些自定义配置。

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "cppcheck",
            "type": "shell",
            "command": "cppcheck --template=gcc --enable=style --project=${workspaceFolder}/build/compile_commands.json",
            "problemMatcher": "$gcc",
        }
    ]
}

或这个:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "cppcheck",
            "type": "shell",
            "command": "cppcheck --template=gcc --enable=warning src/jc_certreq.cpp",
            "problemMatcher": {
                "owner": "cpp",
                "fileLocation": "absolute",
                "pattern": {
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        }
    ]
}

例如终端显示这样的错误:

/home/user/workspace/project/myprogram.c:440: error: Memory leak: exts

但它并没有出现在“问题”栏中。

visual-studio-code cppcheck vscode-tasks
1个回答
2
投票

我一直在寻找解决方案,但只能找到这个未解决的问题。所以我继续修改了一下,最终让它工作了。

问题似乎是旧版本的Cppcheck(我使用的是版本1.82)不支持打印该列。它似乎支持wasn't added until Cppcheck 1.84。但是,默认的$gcc问题匹配器expects the column number to be present

这是使用gcc模板时Cppcheck 1.82打印的消息示例:

utilities/thread/condition.h:12: warning: The class 'Condition' has 'copy constructor' but lack of 'operator='.

虽然GCC 6.3打印的错误如下所示:

dump_tool.c:40:36: fatal error: generated/autoconf.h: No such file or directory

除了丢失的列号之外,它们几乎完全相同。简单地从模式中删除它解决了我的问题。问题已匹配并显示在“问题”选项卡中。

除此之外,我将我的severity调整为warning,以便那些出现在问题标签中,并且当我使用相对路径时,我将fileLocation更改为relative

这是我用于项目的完整任务定义:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        // ...
        {
            "label": "cppcheck",
            "group": "build",
            "type": "shell",
            "command": "cppcheck --template=gcc --enable=warning --std=c++03 --force .",
            "problemMatcher": {
                "fileLocation": "relative",
                "severity": "warning",
                "pattern":{
                    "regexp": "^(.*):(\\d+):\\s+(warning|error):\\s+(.*)$",
                    "file": 1,
                    "location": 2,
                    "severity": 3,
                    "message": 4
                }
            }
        }
    ]
}
© www.soinside.com 2019 - 2024. All rights reserved.