Как определить совпадения проблем для задачи cppcheck в vscode? - PullRequest
0 голосов
/ 05 февраля 2019

Я устанавливаю задачу "cppcheck" для vscode.Это работает, но проблемы не фиксируются с помощью средства сопоставления проблем.

Я пробовал средство сопоставления проблем "$ 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

Но она не отображается на панели «проблемы».

1 Ответ

0 голосов
/ 05 апреля 2019

Я сам искал решение, но смог найти только этот вопрос без ответа.Так что я пошел дальше и немного поработал над этим, и в итоге все заработало.

Проблема, похоже, в том, что более старые версии Cppcheck (я использую версию 1.82) пока не поддерживают печать столбца.Похоже, поддержка этого не была добавлена ​​до Cppcheck 1.84 .Однако по умолчанию $gcc средство сопоставления проблем ожидает, что номер столбца будет присутствовать .

Это пример сообщения Cppcheck 1.82, которое печатается при использовании шаблона gcc:

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
                }
            }
        }
    ]
}
...