C++ және C тілдеріне арналған статикалық код анализаторы cppcheck 2.6 шығарылымы

C және C++ тілдеріндегі кодтағы қателердің әртүрлі сыныптарын анықтауға мүмкіндік беретін cppcheck 2.6 статикалық код анализаторының жаңа нұсқасы шығарылды, оның ішінде ендірілген жүйелерге тән стандартты емес синтаксисті пайдалану кезінде. Плагиндер жинағы берілген, ол арқылы cppcheck әртүрлі әзірлеу, үздіксіз интеграция және тестілеу жүйелерімен біріктірілген, сонымен қатар код стиліне код сәйкестігін тексеру сияқты мүмкіндіктерді қамтамасыз етеді. Кодты талдау үшін өзіңіздің жеке талдаушыңызды немесе Clang қолданбасынан сыртқы талдаушыны пайдалана аласыз. Ол сондай-ақ Debian пакеттері үшін бірлескен кодты тексеру жұмысын орындау үшін жергілікті ресурстарды қамтамасыз ету үшін donate-cpu.py сценарийін қамтиды. Жобаның бастапқы коды GPLv3 лицензиясы бойынша таратылады.

cppcheck дамуы анықталмаған мінез-құлықпен байланысты проблемаларды анықтауға және қауіпсіздік тұрғысынан қауіпті конструкцияларды пайдалануға бағытталған. Мақсат - жалған позитивтерді азайту. Анықталған мәселелердің ішінде: жоқ нысандарға көрсеткіштер, нөлге бөлу, бүтін сандардың асып кетуі, биттерді дұрыс емес ауыстыру операциялары, дұрыс емес түрлендірулер, жадпен жұмыс істеу кезіндегі мәселелер, STL дұрыс пайдаланбау, нөлдік көрсеткішті жою, нақты қол жеткізуден кейін тексерулерді пайдалану. буферге, буфердің асып кетуі, инициализацияланбаған айнымалыларды пайдалану.

Жаңа нұсқада:

  • Анализатордың өзегіне келесі тексерулер қосылды:
    • функция органында қайтару операторының болмауы;
    • қайталанатын деректерді жазады, анықталмаған мінез-құлықты анықтайды;
    • салыстырылатын мән түрдегі мәнді көрсетуден тыс;
    • көшірмені оңтайландыру std::move(local) қайтару үшін қолданылмайды;
    • әртүрлі ағындарда (ағында) оқу және жазу үшін файлды бір уақытта ашу мүмкін емес;
  • Unix платформалары үшін диагностикалық хабарламаларды әртүрлі түстерде көрсетуге қолдау қосылды;
  • ValueFlow үшін символдық талдау қосылды. Екі белгісіз айнымалының айырмашылығын есептегенде қарапайым дельтаны қолданады;
  • "анықтау" таңбалауыштарының тізімі үшін пайдаланылатын ережелер де #include сәйкес келуі мүмкін;
  • кітапхана тегі енді тегті қамтуы мүмкін , және тиісінше std::size, std::empty, std::begin, std::end және т.б. сияқты контейнерлерді қабылдай алатын бос функциялар. қосқыштар үшін yeld немесе әрекетті көрсете алады;
  • кітапхана тегі енді тегті қамтуы мүмкін бірегей иелігі бар смарт көрсеткіштер үшін. Енді смарт көрсеткіштердің осы түрлеріне салбырап тұрған сілтемелер туралы ескерту беріледі;
  • —cppcheck-build-dir параметрін өңдеуге қатысты ақаулар жойылды;
  • htmlreport енді автор туралы ақпаратты көрсете алады (git blame көмегімен);
  • тұрақты емес, бірақ болуы мүмкін айнымалылар туралы кеңейтілген ескертулер;
  • Анализатордың жинақталған қателері мен кемшіліктері түзетілді.

Сонымен қатар, Misra C 2012 тексерулері 1, 2 және 1.1 ережелерін қоспағанда, 1.2-түзету мен 17.3-түзетулерді қоса алғанда, толығымен орындалды. 1.1 және 1.2 тексерулерді компилятор орындауы керек. 17.3 тексеруді GCC сияқты компилятор орындауы мүмкін.

Ақпарат көзі: opennet.ru

пікір қалдыру