Išleistas cppcheck 2.6, statinis kodų analizatorius C++ ir C kalboms

Išleista nauja statinio kodo analizatoriaus cppcheck 2.6 versija, leidžianti identifikuoti įvairias C ir C++ kalbų kodo klaidas, taip pat ir naudojant nestandartinę sintaksę, būdingą įterptinėms sistemoms. Pateikiamas papildinių rinkinys, per kurį cppcheck yra integruotas su įvairiomis kūrimo, nuolatinio integravimo ir testavimo sistemomis, taip pat suteikia tokias funkcijas kaip kodo atitikties kodo stiliui tikrinimas. Norėdami išanalizuoti kodą, galite naudoti savo arba išorinį analizatorių iš Clang. Jame taip pat yra scenarijus donate-cpu.py, suteikiantis vietinius išteklius bendrai Debian paketų kodo peržiūrai atlikti. Projekto šaltinio kodas platinamas pagal GPLv3 licenciją.

Kuriant cppcheck, pagrindinis dėmesys skiriamas problemų, susijusių su neapibrėžtu elgesiu ir saugos požiūriu pavojingų konstrukcijų naudojimu, nustatymui. Taip pat siekiama sumažinti klaidingų teigiamų rezultatų skaičių. Tarp nustatytų problemų: rodyklės į neegzistuojančius objektus, padalijimas iš nulio, sveikųjų skaičių perpildymas, neteisingos bitų poslinkio operacijos, neteisingos konversijos, problemos dirbant su atmintimi, neteisingas STL naudojimas, nulinės rodyklės nuorodos, patikrinimų naudojimas po faktinės prieigos į buferį, buferio viršijimas, nepainicijuotų kintamųjų naudojimas.

Naujoje versijoje:

  • Prie analizatoriaus šerdies buvo pridėti šie patikrinimai:
    • funkcijos korpuse nėra grąžinimo operatoriaus;
    • fiksuoja persidengiančius duomenis, nustato neapibrėžtą elgesį;
    • lyginamoji vertė yra už tipo reikšmės atvaizdavimo ribų;
    • kopijavimo optimizavimas netaikomas grąžinant std::move(local);
    • failo negalima vienu metu atidaryti, kad būtų galima skaityti ir rašyti skirtinguose srautuose (srautas);
  • „Unix“ platformoms – papildomas diagnostikos pranešimų rodymo skirtingomis spalvomis palaikymas;
  • pridėta simbolinė ValueFlow analizė. Skaičiuodamas dviejų nežinomų kintamųjų skirtumą, naudoja paprastą delta;
  • taisyklės, naudojamos žetonų sąrašui "define", taip pat gali atitikti #include;
  • bibliotekos žyma dabar gali būti žyma , ir atitinkamai nemokamos funkcijos, kurios gali priimti tokius konteinerius kaip std::size, std::empty, std::begin, std::end ir kt. gali nurodyti jungčių šūksnį arba veiksmą;
  • bibliotekos žyma dabar gali būti žyma išmaniosioms nuorodoms, kurios turi unikalią nuosavybę. Dabar paskelbtas įspėjimas dėl kabančių nuorodų į tokio tipo išmaniąsias nuorodas;
  • ištaisytos problemos apdorojant parametrą —cppcheck-build-dir;
  • htmlreport dabar gali rodyti informaciją apie autorių (naudojant git blame);
  • išplėstiniai įspėjimai apie kintamuosius, kurie nėra pastovūs, bet gali būti;
  • Ištaisytos susikaupusios analizatoriaus klaidos ir trūkumai.

Be to, 2012 m. Misra C patikros, įskaitant 1 ir 2 pataisas, buvo visiškai įgyvendintos, išskyrus 1.1, 1.2 ir 17.3 taisykles. 1.1 ir 1.2 patikrinimus turi atlikti kompiliatorius. 17.3 patikrinimą gali atlikti kompiliatorius, pvz., GCC.

Šaltinis: opennet.ru

Добавить комментарий