Новое сообщение «Активные проверки» в cppcheck после обновления

Я интегрирую анализ cppcheck с CMake, указав следующую командную строку:

cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_CPPCHECK = "cppcheck;--enable=all;--suppress=missingIncludeSystem;--inline-suppr;--std=c++17;--error-exitcode=1"

и работает хорошо.

После обновления Ubuntu до версии 2.13.0 я начал видеть это дополнительное сообщение/предупреждение:

...
[89/108] Building CXX object include/boost/multi/adaptors/fftw/test/CMakeFiles/combinations.cpp.x.dir/combinations.cpp.o
Checking /home/user/boost-multi/include/boost/multi/adaptors/fftw/test/combinations.cpp ...
nofile:0:0: information: Active checkers: 4/592 (use --checkers-report=<filename> to see details) [checkersReport]
...

Для каждой цели!

Что означает это сообщение "Активные шашки: 4/592"? Почему cppcheck?

Справка говорит:

$ cppcheck --help
...
    --checkers-report=<file>
                         Write a report of all the active checkers to the given file.
...

Но это не помогает мне понять.

Когда я добавляю опцию 4, я получаю следующий файл

$ cat ./.build.g++.plus/cppcheck.report
Critical errors
---------------
No critical errors, all files were checked.
Important: Analysis is still not guaranteed to be 'complete' it is possible there are false negatives.


Open source checkers
--------------------
No   Check64BitPortability::pointerassignment                  require:portability
No   CheckAssert::assertWithSideEffects                        require:warning
No   CheckAutoVariables::assignFunctionArg                     require:style,warning
No   CheckAutoVariables::autoVariables
No   CheckAutoVariables::checkVarLifetime
No   CheckBool::checkAssignBoolToFloat                         require:style,c++
No   CheckBool::checkAssignBoolToPointer
No   CheckBool::checkBitwiseOnBoolean                          require:style,inconclusive
No   CheckBool::checkComparisonOfBoolExpressionWithInt         require:warning
No   CheckBool::checkComparisonOfBoolWithBool                  require:style,c++
No   CheckBool::checkComparisonOfBoolWithInt                   require:warning,c++
No   CheckBool::checkComparisonOfFuncReturningBool             require:style,c++
No   CheckBool::checkIncrementBoolean                          require:style
No   CheckBool::pointerArithBool
No   CheckBool::returnValueOfFunctionReturningBool             require:style
No   CheckBoost::checkBoostForeachModification
Yes  CheckBufferOverrun::analyseWholeProgram
No   CheckBufferOverrun::argumentSize                          require:warning
No   CheckBufferOverrun::arrayIndex
No   CheckBufferOverrun::arrayIndexThenCheck
No   CheckBufferOverrun::bufferOverflow
No   CheckBufferOverrun::negativeArraySize
No   CheckBufferOverrun::objectIndex
No   CheckBufferOverrun::pointerArithmetic                     require:portability
No   CheckBufferOverrun::stringNotZeroTerminated               require:warning,inconclusive
Yes  CheckClass::analyseWholeProgram
No   CheckClass::checkConst                                    require:style,inconclusive
No   CheckClass::checkConstructors                             require:style,warning
No   CheckClass::checkCopyConstructors                         require:warning
No   CheckClass::checkDuplInheritedMembers                     require:warning
No   CheckClass::checkExplicitConstructors                     require:style
No   CheckClass::checkMemset
No   CheckClass::checkMissingOverride                          require:style,c++03
No   CheckClass::checkSelfInitialization
No   CheckClass::checkThisUseAfterFree                         require:warning
No   CheckClass::checkUnsafeClassRefMember                     require:warning,safeChecks
No   CheckClass::checkUselessOverride                          require:style
No   CheckClass::checkVirtualFunctionCallInConstructor         require:warning
No   CheckClass::initializationListUsage                       require:performance
No   CheckClass::initializerListOrder                          require:style,inconclusive
No   CheckClass::operatorEqRetRefThis                          require:style
No   CheckClass::operatorEqToSelf                              require:warning
No   CheckClass::privateFunctions                              require:style
No   CheckClass::thisSubtraction                               require:warning
No   CheckClass::virtualDestructor
No   CheckCondition::alwaysTrueFalse                           require:style
No   CheckCondition::assignIf                                  require:style
No   CheckCondition::checkAssignmentInCondition                require:style
No   CheckCondition::checkBadBitmaskCheck                      require:style
No   CheckCondition::checkCompareValueOutOfTypeRange           require:style,platform
No   CheckCondition::checkDuplicateConditionalAssign           require:style
No   CheckCondition::checkIncorrectLogicOperator               require:style,warning
No   CheckCondition::checkInvalidTestForOverflow               require:warning
No   CheckCondition::checkModuloAlwaysTrueFalse                require:warning
No   CheckCondition::checkPointerAdditionResultNotNull         require:warning
No   CheckCondition::clarifyCondition                          require:style
No   CheckCondition::comparison                                require:style
No   CheckCondition::duplicateCondition                        require:style
No   CheckCondition::multiCondition                            require:style
No   CheckCondition::multiCondition2                           require:warning
No   CheckExceptionSafety::checkCatchExceptionByValue          require:style
No   CheckExceptionSafety::checkRethrowCopy                    require:style
No   CheckExceptionSafety::deallocThrow                        require:warning
No   CheckExceptionSafety::destructors                         require:warning
No   CheckExceptionSafety::nothrowThrows
No   CheckExceptionSafety::rethrowNoCurrentException
No   CheckExceptionSafety::unhandledExceptionSpecification     require:style,inconclusive
No   CheckFunctions::checkIgnoredReturnValue                   require:style,warning
No   CheckFunctions::checkMathFunctions                        require:style,warning,c99,c++11
No   CheckFunctions::checkMissingReturn
No   CheckFunctions::checkProhibitedFunctions
No   CheckFunctions::invalidFunctionUsage
No   CheckFunctions::memsetInvalid2ndParam                     require:warning,portability
No   CheckFunctions::memsetZeroBytes                           require:warning
No   CheckFunctions::returnLocalStdMove                        require:performance,c++11
No   CheckFunctions::useStandardLibrary                        require:style
No   CheckIO::checkCoutCerrMisusage                            require:c
No   CheckIO::checkFileUsage
No   CheckIO::checkWrongPrintfScanfArguments
No   CheckLeakAutoVar::check                                   require:notclang
No   CheckMemoryLeakInClass::check
No   CheckMemoryLeakInFunction::checkReallocUsage
No   CheckMemoryLeakNoVar::check
No   CheckMemoryLeakStructMember::check
Yes  CheckNullPointer::analyseWholeProgram
No   CheckNullPointer::arithmetic
No   CheckNullPointer::nullConstantDereference
No   CheckNullPointer::nullPointer
No   CheckOther::checkAccessOfMovedVariable                    require:c++11,warning
No   CheckOther::checkCastIntToCharAndBack                     require:warning
No   CheckOther::checkCharVariable                             require:warning,portability
No   CheckOther::checkComparePointers
No   CheckOther::checkComparisonFunctionIsAlwaysTrueOrFalse    require:warning
No   CheckOther::checkConstPointer                             require:style
No   CheckOther::checkDuplicateBranch                          require:style,inconclusive
No   CheckOther::checkDuplicateExpression                      require:style,warning
No   CheckOther::checkEvaluationOrder                          require:C/C++03
No   CheckOther::checkFuncArgNamesDifferent                    require:style,warning,inconclusive
No   CheckOther::checkIncompleteArrayFill                      require:warning,portability,inconclusive
No   CheckOther::checkIncompleteStatement                      require:warning
No   CheckOther::checkInterlockedDecrement                     require:windows-platform
No   CheckOther::checkInvalidFree
No   CheckOther::checkKnownArgument                            require:style
No   CheckOther::checkKnownPointerToBool                       require:style
No   CheckOther::checkMisusedScopedObject                      require:style,c++
No   CheckOther::checkModuloOfOne                              require:style
No   CheckOther::checkNanInArithmeticExpression                require:style
No   CheckOther::checkNegativeBitwiseShift
No   CheckOther::checkOverlappingWrite
No   CheckOther::checkPassByReference                          require:performance,c++
No   CheckOther::checkRedundantAssignment                      require:style
No   CheckOther::checkRedundantCopy                            require:c++,performance,inconclusive
No   CheckOther::checkRedundantPointerOp                       require:style
No   CheckOther::checkShadowVariables                          require:style
No   CheckOther::checkSignOfUnsignedVariable                   require:style
No   CheckOther::checkSuspiciousCaseInSwitch                   require:warning,inconclusive
No   CheckOther::checkSuspiciousSemicolon                      require:warning,inconclusive
No   CheckOther::checkUnreachableCode                          require:style
No   CheckOther::checkUnusedLabel                              require:style,warning
No   CheckOther::checkVarFuncNullUB                            require:portability
No   CheckOther::checkVariableScope                            require:style,notclang
No   CheckOther::checkZeroDivision
No   CheckOther::clarifyCalculation                            require:style
No   CheckOther::clarifyStatement                              require:warning
No   CheckOther::invalidPointerCast                            require:portability
No   CheckOther::redundantBitwiseOperationInSwitch             require:warning
No   CheckOther::warningOldStylePointerCast                    require:style,c++
No   CheckPostfixOperator::postfixOperator                     require:performance
No   CheckSizeof::checkSizeofForArrayParameter                 require:warning
No   CheckSizeof::checkSizeofForNumericParameter               require:warning
No   CheckSizeof::checkSizeofForPointerSize                    require:warning
No   CheckSizeof::sizeofCalculation                            require:warning
No   CheckSizeof::sizeofFunction                               require:warning
No   CheckSizeof::sizeofVoid                                   require:portability
No   CheckSizeof::sizeofsizeof                                 require:warning
No   CheckSizeof::suspiciousSizeofCalculation                  require:warning,inconclusive
No   CheckStl::checkDereferenceInvalidIterator                 require:warning
No   CheckStl::checkDereferenceInvalidIterator2
No   CheckStl::checkFindInsert                                 require:performance
No   CheckStl::checkMutexes                                    require:warning
No   CheckStl::erase
No   CheckStl::if_find                                         require:warning,performance
No   CheckStl::invalidContainer
No   CheckStl::iterators
No   CheckStl::knownEmptyContainer                             require:style
No   CheckStl::misMatchingContainerIterator
No   CheckStl::misMatchingContainers
No   CheckStl::missingComparison                               require:warning
No   CheckStl::negativeIndex
No   CheckStl::outOfBounds
No   CheckStl::outOfBoundsIndexExpression
No   CheckStl::redundantCondition                              require:style
No   CheckStl::size                                            require:performance,c++03
No   CheckStl::stlBoundaries
No   CheckStl::stlOutOfBounds
No   CheckStl::string_c_str
No   CheckStl::useStlAlgorithm                                 require:style
No   CheckStl::uselessCalls                                    require:performance,warning
No   CheckString::checkAlwaysTrueOrFalseStringCompare          require:warning
No   CheckString::checkIncorrectStringCompare                  require:warning
No   CheckString::checkSuspiciousStringCompare                 require:warning
No   CheckString::overlappingStrcmp                            require:warning
No   CheckString::sprintfOverlappingData
No   CheckString::strPlusChar
No   CheckString::stringLiteralWrite
No   CheckType::checkFloatToIntegerOverflow
No   CheckType::checkIntegerOverflow                           require:platform
No   CheckType::checkLongCast                                  require:style
No   CheckType::checkSignConversion                            require:warning
No   CheckType::checkTooBigBitwiseShift                        require:platform
No   CheckUninitVar::check
No   CheckUninitVar::valueFlowUninit
Yes  CheckUnusedFunctions::analyseWholeProgram
No   CheckUnusedVar::checkFunctionVariableUsage                require:style
No   CheckUnusedVar::checkStructMemberUsage                    require:style
No   CheckVaarg::va_list_usage                                 require:notclang
No   CheckVaarg::va_start_argument


Premium checkers
----------------
Not available, Cppcheck Premium is not used


Autosar
-------
Not available, Cppcheck Premium is not used


Cert C
------
Not available, Cppcheck Premium is not used


Cert C++
--------
Not available, Cppcheck Premium is not used


Misra C
-------
Misra is not enabled


Misra C++ 2008
--------------
Not available, Cppcheck Premium is not used

Что говорилось в отчете?

Sneftel 14.07.2024 11:57

Кстати, cppcheck имеет открытый исходный код, поэтому любые загадки можно разгадать, посмотрев его исходный код.

heap underrun 14.07.2024 12:19

@Sneftel, посмотри мою правку.

alfC 14.07.2024 12:22

@heapunderrun, текстовые сообщения и документация могут сбивать с толку (некоторых) даже в проекте с открытым исходным кодом.

alfC 14.07.2024 12:23
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
138
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я не эксперт по Cppcheck, но использую его регулярно.

Мое понимание проблемы

Ваш файл отчета cppcheck.report предполагает, что некоторые проверки не были включены с помощью флага --enable=. Например, у вас есть множество проверок require:style или require:warning, которые вы не включили, как здесь No CheckStl::checkMutexes require:warning.

Что предлагает исходный код Cppcheck

Если посмотреть исходный код на сайте https://cppcheck.sourceforge.io/devinfo/doxyoutput/cppcheckexecutor_8cpp_source.html онлайн, 344 можно увидеть сообщение, которое распечатывается в этой ситуации. Функция создает список включенных вами проверок и генерирует отчет.

Причина (по моему мнению)

Некоторые проблемы связаны с премиум-версией (например, средства проверки для MIRSA, Cert C и C++), поэтому я думаю, что это их способ продвигать премиум-версию cppcheck. В то же время есть такие проверки, как inconclusive, которые, по крайней мере с моей стороны, заставляют мой компилятор C++ жаловаться на конкретные ситуации, связанные с моим кодом. На страницах руководства cppcheck также предполагается, что флаг --inconclusive может вызывать ложные срабатывания. Поэтому я считаю, что эта ошибка предназначена для того, чтобы мы знали обо всех функциях, которые мы не используем в cppcheck, и что нам, как пользователям, необходимо проверить, нужны ли нам эти функции.

Как удалить ошибку

Один из способов устранить ошибку — добавить checkersReport к флагу --suppress=, чтобы ее можно было подавить. Однако я бы посоветовал вам сохранить файл отчета, чтобы вы могли вручную просканировать его и убедиться, что все средства проверки, которые вы хотели использовать, были использованы.

Спасибо за исчерпывающий ответ. Возможно, происходит то, что --enable=all (это флаг, который я использую) на самом деле не включает все проверки в этой версии cppcheck.

alfC 16.07.2024 20:23

Хммм, из любопытства, какие у вас параметры компилятора в CMake? Например, включены ли у вас -Wall, -Wconversion, -Werror, -Wextra? Причина, по которой я спрашиваю об этом, заключается в том, что сгенерированный cppcheck.report представляет собой файл отчета, который может содержать ложноотрицательные результаты, как указано в верхней части файла. На моей стороне, когда эти параметры компилятора включены, у меня есть только неубедительные предупреждения и некоторые проблемы, связанные с логическими побитовыми операциями. Однако они исчезают, когда я удаляю флаг --suppress=missingIncludeSystem. Не могли бы вы добавить эти флаги компилятора и посмотреть, есть ли какие-либо ошибки компилятора, пожалуйста?

DJBlom 17.07.2024 22:24

Думаю, я имею в виду, что флаг --enable=all работает правильно. Но cppcheck не знает, стоит ли показывать пользователю обнаруженные проблемы, потому что они могут быть ложноотрицательными или это может быть из-за установленной вами опции, которая заставляет cppcheck анализировать код в пределах границ, которые вы его описываете. Итак, он передает его в файл журнала, чтобы мы могли просмотреть его вручную (например, cppcheck.report).

DJBlom 17.07.2024 22:46

Например, эта проблема No CheckBool::checkBitwiseOnBoolean require:style,inconclusive является результатом добавления --suppress=missingIncludeSystem в вашу конфигурацию. Если вы удалите эту опцию, вы получите кучу проверок information, которые завершатся неудачей, потому что cppcheck не может найти, ох, я не знаю, pthread.h, например.

DJBlom 17.07.2024 22:46

Извиняюсь за множество комментариев.

DJBlom 17.07.2024 22:46

Я активирую все возможные предупреждения, github.com/correaa/boost-multi/blob/master/test/… и запускаю cmake/cppcheck со следующими параметрами: github.com/correaa/boost-multi/blob /… . Извините, что я не понимаю вашего объяснения.

alfC 17.07.2024 23:38

Это интересно. Если вы найдете время и захотите проверить что-нибудь, теорию. Не могли бы вы убрать флаг --suppress=missingIncludeSystem, запустите cppcheck и посмотрите, превратилось ли большинство «Нет» в «Да».

DJBlom 19.07.2024 01:12

Если я удалю --suppress=missingIncludeSystem, то получу сотни таких ошибок information: Include file: <vector> not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem]. Кроме того, в файле cppcheck.report я по-прежнему вижу почти все проверки как No. ПРИМЕЧАНИЕ. Это касается cppcheck 2.14.2 в MacOS, а это не исходная система, в которой я обнаружил эту проблему.

alfC 22.07.2024 19:15

Я добавил этот вывод в Cppcheck как часть сертификации безопасности. Это позволяет пользователям видеть, выполняются ли ожидаемые проверки или нет.

В вашем случае я не понимаю, почему там написано только, что было исполнено 4 шашки, что звучит очень низко. Может быть какая-то проблема.

Я не уверен, как cmake выполняет cppcheck. Но существует ли «каталог сборки cppcheck», который означает, что программы проверки не выполняются? Это было бы прекрасно.

Как будто enable-all не работает, когда я передаю параметры команды через cmake, cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_CPPLINT = "cpplint;--quiet" -DCMAKE_CXX_CPPCHECK = "cppcheck;--enable=all;--suppress=missi‌​ngIncludeSystem;--in‌​line-suppr;--std=c++‌​17;--check-config;--‌​error-exitcode=1". Я помню, как cpp проверял много вещей, по крайней мере, в прошлом.

alfC 20.07.2024 05:35

Странный. Я не знаю, что делает cmake, но Cppcheck должен запускать более 4 программ проверки, даже если вы не указали опцию --enable. Все программы проверки ошибок должны быть выполнены. Мне кажется, что файл по какой-то причине пропущен, и тогда я предположил, что «каталог сборки cppcheck». Критические ошибки также могут быть причиной этого, но в вашем отчете указано «Нет критических ошибок». Если вы добавите какую-то ошибку в файл, cppcheck предупредит об этом, и будет ли в отчете чекеров по-прежнему указано, что выполняются только 4 чекера? если вы добавите куда-нибудь эту строку кода, cppcheck должен предупредить: int dummy = 1000/0;

Daniel Marjamäki 22.07.2024 10:40

если ошибка слишком очевидна, сам компилятор может пожаловаться до cppcheck. Что я собираюсь сделать, так это прокомментировать одно из «прагм», игнорируемых cppcheck. Это все очень странно.

alfC 22.07.2024 17:52

Другие вопросы по теме

Могу ли я доказать монотонность ассигнований с помощью Rust Borrow Checker
Плагин WP: почему следующий упрощенный код не проходит проверку
Есть ли способ найти «скрытые» неиспользуемые переменные в Rust?
Получение слишком конкретной ошибки параметра (OCP_OVERLY_CONCRETE_PARAMETER), даже если используется объект типа списка
Сканирование безопасности помечало локальную переменную для проверки кучи в функции C
Могу ли я воспроизвести правило eslint «prefer-object-spread» с помощью ast-grep?
Как я могу заставить clang-tidy не жаловаться на передачу легковесных типов по значению?
Проверки статического анализа не могут найти тривиальную проблему C++
Как включить статический анализ с пользовательским набором правил в MSVC через CMakeLists.txt?
В VS2022 вы можете настроить конфигурацию редактора для всего решения и конфигурацию редактора для конкретного проекта, которая переопределяет?