The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Выпуск cppcheck 2.6, статического анализатора кода для языков C++ и С

07.10.2021 14:35

Вышла новая версия статического анализатора кода cppcheck 2.6, позволяющего выявлять различные классы ошибок в коде на языках Си и Си++, в том числе при использовании нестандартного синтаксиса, типичного для встраиваемых систем. Предоставляется коллекция плагинов, через которые обеспечена интеграция cppcheck с различными системами разработки, непрерывной интеграции и тестирования, а также предоставлены такие возможности как проверка соответствия кода стилю оформления кода. Для разбора кода может применяться как собственный парсер, так и внешний парсер от Clang. В состав также входит скрипт donate-cpu.py для предоставления локальных ресурсов для выполнения работы по совместной проверке кода пакетов Debian. Исходные тексты проекта распространяются под лицензией GPLv3.

Развитие cppcheck сосредоточено на выявлении проблем, связанных с неопределённым поведением и применением конструкций, опасных с точки зрения безопасности. Целью также является минимизация ложных срабатываний. Среди выявляемых проблем: указатели на несуществующие объекты, деления на ноль, целочисленные переполнения, некорректные операции битового сдвига, некорректные преобразования, проблемы при работе с памятью, некорректное использование STL, разыменование нулевых указателей, применение проверок после фактического обращения к буферу, выход за границы буферов, использование неинициализированных переменных.

В новой версии:

  • В ядро анализатора добавлены следующие проверки:
    • Отсутствия оператора return в теле функции;
    • Записи перекрывающихся данных, определения неопределённого поведения;
    • Сравниваемое значение находится за пределами представления значений типа;
    • Оптимизация копирования не применяется для return std::move(local);
    • Файл не может быть открыт одновременно для чтения и для записи в разных потоках (stream);
  • Для Unix-платформ добавлена поддержка вывода диагностических сообщений разными цветами;
  • Добавлен символьный анализ для ValueFlow. Используется простая дельта при вычислении различий между двумя неизвестными переменными;
  • Правила, используемые для списка токенов "define", также могут соответствовать и #include;
  • Библиотечный тег <function> теперь может содержать тег <container>, и соответственно функции free, которые могут принимать такие контейнеры как std::size, std::empty, std::begin, std::end и т.д. могут указывать yeld или action для контейнеров;
  • Библиотечный тег <smart-pointer> теперь может содержать тег <unique> для умных указателей, которые имеют исключительное владение (unique ownership). Теперь выдаётся предупреждение о "висячих" ссылках на такого рода умные указатели;
  • Исправлены проблемы с обработкой параметра --cppcheck-build-dir;
  • htmlreport теперь может выводить информацию об авторе (при помощи git blame);
  • Расширена выдача предупреждений о переменных, которые не являются константными, но которые можно перевести в константные;
  • Исправлены накопившиеся ошибки и недоработки анализатора.

Дополнительно были полностью реализованы проверки из Misra C 2012, включая Amendment 1 и Amendment 2, кроме правил 1.1 , 1.2 and 17.3. Проверки 1.1 и 1.2 должны выполняться компилятором. Проверка 17.3 может выполнять компилятором, например GCC.

  1. Главная ссылка к новости (https://github.com/danmar/cppc...)
  2. OpenNews: Facebook открыл код статического анализатора Mariana Trench
  3. OpenNews: Выпуск Psalm 3.12, статического анализатора для языка PHP. Альфа выпуск PHP 8.0
  4. OpenNews: Релиз статического анализатора cppcheck 2.1
  5. OpenNews: Релиз свободного статического анализатора кода frama-clang 0.0.5
  6. OpenNews: Система анализа сетевых угроз Metron получила статус первичного проекта Apache
Автор новости: Совершенно другой аноним
Тип: Программы
Короткая ссылка: https://opennet.ru/55936-cppcheck
Ключевые слова: cppcheck
Поддержать дальнейшую публикацию новостей на OpenNET.


Обсуждение (52) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, leibniz (ok), 15:38, 07/10/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    лучший анализатор кода -- мозг программиста
     
     
  • 2.38, Аноним (38), 18:13, 07/10/2021 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Уже много десятилетий, как нет.
     
     
  • 3.41, Злюка (?), 18:47, 07/10/2021 [^] [^^] [^^^] [ответить]  
  • +11 +/
    Не правда. У некоторых еще есть.
     
     
  • 4.42, ы (?), 18:51, 07/10/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Вам бы, сударь, синтаксический анализатор не помешало бы. Такие дела.
     
     
  • 5.63, n00by (ok), 10:30, 08/10/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Семантический.
     
  • 4.53, Аноним (53), 20:55, 07/10/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >У некоторых еще есть.

    вот именно, что у некоторых, и именно что еще.

     
  • 2.46, InuYasha (??), 19:29, 07/10/2021 [^] [^^] [^^^] [ответить]  
  • +/
    нет, потому что очень устаёт X(
     
  • 2.47, Аноним (47), 19:30, 07/10/2021 [^] [^^] [^^^] [ответить]  
  • +11 +/
    Да! Но при условии что этот программист больше не человек и не способен ошибиться.
     
     
  • 3.60, Vkni (ok), 06:57, 08/10/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Это, как раз, ни о чём. Статические анализаторы имеют право на ошибку - ложноположительное срабатывание. Иначе бы их проверки были включены в компилятор и имели статус Error, а не Warning.
     
     
  • 4.62, Дмитрий (??), 09:40, 08/10/2021 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Нельзя просто так взять и поменять Warning на Error. В первую очередь из-за сохранения обратной совместимости
     
     
  • 5.78, Vkni (ok), 22:18, 09/10/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну хорошо, в предупреждения компилятора засунуть все эти cppcheck/PVS Studio.

    В любом случае, у нас есть простое правило - компилятор не имеет права на ложно-положительное срабатывание, а стат. анализатор имеет. Иначе вот всё это должно быть просто всунуто в компилятор.

     
  • 4.72, Аноним (72), 20:04, 08/10/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Сейчас к тебе придут наркоманы и расскажут про компилятор и софт не имеющий ошибок.
     
  • 2.54, Ульянка (?), 21:39, 07/10/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    у тебя всегда все лучшее, бессмысленный комментатор
     
  • 2.55, Умпа (?), 21:48, 07/10/2021 [^] [^^] [^^^] [ответить]  
  • –5 +/
    >> лучший анализатор кода -- мозг программиста

    Сам ты, то есть, не программист ни разу?
    А зачем ты рот тут тогда открываешь?

     
  • 2.56, Аноним (56), 23:09, 07/10/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Для си smatch больше проблем находил. Только из гита собирать ннада. Мозг программиста такая вещь, он ожидает, что код будет работать, а потом оказывается, не везде и не всегда.
     
  • 2.66, acroobat (??), 15:18, 08/10/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Если программист - робот, то да.
     

  • 1.3, lockywolf (ok), 15:47, 07/10/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    A study at the TU Delft, by Cathal Boogerd and Leon Moonen, empirically assesses the value of MISRA C:2004. It comes to similar results:[29]

        From the data obtained, we can make the following key observations. First, there are 9 out of 72 rules for which violations were observed that perform significantly better (α = 0.05) than a random predictor at locating fault-related lines. The true positive rates for these rules range from 24-100%. Second, we observed a negative correlation between MISRA rule violations and observed faults. In addition, 29 out of 72 rules had a zero true positive rate. Taken together with Adams' observation that all modifications have a non-zero probability of introducing a fault, this makes it possible that adherence to the MISRA standard as a whole would have made the software less reliable.


    https://en.m.wikipedia.org/wiki/MISRA_C

     
     
  • 2.7, Неуклюжий танцор (?), 15:53, 07/10/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Благодарю, добрый человек! Никогда бы не подумал, что так может быть!
     
  • 2.67, Аноним (-), 15:46, 08/10/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ничего не понял. Если ты запостил на аглицком, то и переведи с аглицкого.
     
     
  • 3.73, Аноним (73), 20:12, 08/10/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Продолжайте программировать на своём 1С, пожалуйста.
     

  • 1.5, QwertyReg (ok), 15:49, 07/10/2021 Скрыто модератором [﹢﹢﹢] [ · · · ]
  • –22 +/
     
     
  • 2.6, Аноним (6), 15:53, 07/10/2021 Скрыто модератором
  • +7 +/
     
     
  • 3.9, Аноним (9), 16:00, 07/10/2021 Скрыто модератором
  • –6 +/
     
     
  • 4.12, Аноним (12), 16:10, 07/10/2021 Скрыто модератором
  • +/
     
     
  • 5.15, Аноним (9), 16:30, 07/10/2021 Скрыто модератором
  • –2 +/
     
     
  • 6.21, QwertyReg (ok), 16:37, 07/10/2021 Скрыто модератором
  • –2 +/
     
     
  • 7.25, Урри (ok), 16:58, 07/10/2021 Скрыто модератором
  • +2 +/
     
     
  • 8.33, lockywolf (ok), 17:59, 07/10/2021 Скрыто модератором
  • +/
     
     
  • 9.34, Урри (ok), 18:04, 07/10/2021 Скрыто модератором
  • +/
     
  • 7.36, Аноним (36), 18:07, 07/10/2021 Скрыто модератором
  • +1 +/
     
  • 6.37, Аноним (36), 18:10, 07/10/2021 Скрыто модератором
  • –1 +/
     
     
  • 7.40, QwertyReg (ok), 18:37, 07/10/2021 Скрыто модератором
  • –1 +/
     
     
  • 8.43, Аноним (-), 19:02, 07/10/2021 Скрыто модератором
  • +/
     
  • 8.45, Дэвид РокфеллерМладший (?), 19:25, 07/10/2021 Скрыто модератором
  • +/
     
  • 6.48, Дэвид РокфеллерМладший (?), 19:33, 07/10/2021 Скрыто модератором
  • +1 +/
     
  • 2.11, Аноним (12), 16:08, 07/10/2021 Скрыто модератором
  • +7 +/
     
  • 2.14, Аноним (14), 16:15, 07/10/2021 Скрыто модератором
  • +/
     
     
  • 3.50, МояВенда (ok), 19:53, 07/10/2021 Скрыто модератором
  • –1 +/
     
  • 2.17, Аноним (17), 16:32, 07/10/2021 Скрыто модератором
  • +/
     

     ....ответы скрыты модератором (18)

  • 1.13, Аноним (14), 16:13, 07/10/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Где A4?
     
     
     
     
     
    Часть нити удалена модератором

  • 5.31, Сатья Наделла (?), 17:36, 07/10/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Я тоже попробовал ZorinOS и решил пока на ней остаться. Понравились некоторые фишки и я решил их добавить в свой небольшой проект.
     

  • 1.49, InuYasha (??), 19:33, 07/10/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Записи незаписывающихся данных, определения неопределённого поведения, сравнения несравнимых величин, вызова невызываемого кода, выхода из безвыходных ситуаций... wait, oh, shi-

    %)

     
     
  • 2.58, Аноньимъ (ok), 04:35, 08/10/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Что это за безобразие Берремор?

    Это сишка, сэр!

     
     
  • 3.59, МарьВанна (?), 06:00, 08/10/2021 [^] [^^] [^^^] [ответить]  
  • +/
    "Берримор".

    Пишите без ошибок.

     

  • 1.65, Аноним (-), 13:00, 08/10/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    А нету такого же, но только для ASM-а?
     
     
  • 2.68, Совершенно другой аноним (?), 16:22, 08/10/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Языки ассемблера у всех сильно разные. Вот есть проект https://github.com/gaul/x86lint, но как я понял - он немного не про это.
     
     
  • 3.69, n00by (ok), 17:12, 08/10/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Он вообще не про это. Проверяет опкоды на "оптимальность" по размеру. Надо понимать, что многобайтные NOP намеренно используют для выравнивания целей переходов по границам кеш-линий. Для этих же целей компиляторы могут генерировать "неоптимальные" большие команды.
     
  • 2.70, Ordu (ok), 17:18, 08/10/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Нет, и быть не может. Чтобы асм разбирать, что там сделано намеренно, а что случайно, статическому анализатору как-то по машинным инструкциям надо будет угадать задумку программиста, а это за пределами возможностей существующих AI. Единственный способ с этим бороться -- потребовать от программиста аннотациями декларировать свои намерения. Но требуя это, ты требуешь от него, чтобы он писал на высокоуровневом языке аннотаций. И нахрен тогда ассемблер? Дедуктивный вывод даётся программам проще индуктивного. Поэтому программы гораздо лучше из аннотаций могут сгенерить ассемблерный код, чем из ассемблерного кода аннотации.

    Может быть, когда-нибудь, в будуем... Может даже не столь отдалённом... Но раньше чем через десять лет ждать не стоит.

     

  • 1.71, Аноним (72), 18:58, 08/10/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Молодцы. Удачи проекту.
     
  • 1.74, Аноним (74), 22:49, 08/10/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    я вас предупредил warning
    both of the PVS and cppcheck can't detect the copying from the structure member pointer instead of the member pointer contains
     
     
  • 2.77, Аноним (77), 10:58, 09/10/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что это далеко не всегда ошибка.
     

  • 1.79, Andrey_Karpov (ok), 15:45, 15/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Для информации. Вышел инструмент под названием Cppcheck Premium. Он включает в себя открытый инструмент Cppcheck, а также премиальный компонент. https://habr.com/ru/news/t/589247/
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:
    При перепечатке указание ссылки на opennet.ru обязательно



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2021 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру