Izdaja cppcheck 2.6, statičnega analizatorja kode za jezika C++ in C

Izdana je bila nova različica analizatorja statične kode cppcheck 2.6, ki vam omogoča prepoznavanje različnih razredov napak v kodi v jezikih C in C++, vključno z uporabo nestandardne sintakse, značilne za vgrajene sisteme. Zagotovljena je zbirka vtičnikov, prek katerih je cppcheck integriran z različnimi sistemi za razvoj, stalno integracijo in testiranje, poleg tega pa nudi funkcije, kot je preverjanje skladnosti kode s slogom kode. Za razčlenjevanje kode lahko uporabite svoj lastni razčlenjevalnik ali zunanji razčlenjevalnik podjetja Clang. Vključuje tudi skript donate-cpu.py za zagotavljanje lokalnih virov za sodelovanje pri pregledu kode za pakete Debian. Izvorna koda projekta se distribuira pod licenco GPLv3.

Razvoj cppcheck je osredotočen na prepoznavanje težav, povezanih z nedefiniranim vedenjem in uporabo dizajnov, ki so nevarni z varnostnega vidika. Cilj je tudi zmanjšati lažne pozitivne rezultate. Med ugotovljenimi težavami: kazalci na neobstoječe objekte, deljenja z ničlo, prelivi celih števil, nepravilne operacije bitnega premika, nepravilne pretvorbe, težave pri delu s pomnilnikom, nepravilna uporaba STL, dereference ničelnega kazalca, uporaba preverjanj po dejanskem dostopu. v medpomnilnik, prekoračitev medpomnilnika, uporaba neinicializiranih spremenljivk.

V novi različici:

  • V jedro analizatorja so bila dodana naslednja preverjanja:
    • odsotnost povratnega operatorja v telesu funkcije;
    • beleži prekrivajoče se podatke, ugotavlja nedefinirano vedenje;
    • vrednost, ki se primerja, je izven predstavitev vrednosti tipa;
    • optimizacija kopiranja ne velja za return std::move(local);
    • datoteke ni mogoče hkrati odpreti za branje in pisanje v različnih tokovih (tok);
  • za platforme Unix dodana podpora za prikaz diagnostičnih sporočil v različnih barvah;
  • dodana simbolna analiza za ValueFlow. Uporablja preprosto delto pri izračunu razlike med dvema neznanima spremenljivkama;
  • pravila, uporabljena za seznam žetonov "define", se lahko ujemajo tudi z #include;
  • oznaka knjižnice zdaj lahko vsebuje oznako in s tem brezplačne funkcije, ki lahko sprejmejo vsebnike, kot so std::size, std::empty, std::begin, std::end itd. lahko določi yeld ali action za konektorje;
  • oznaka knjižnice zdaj lahko vsebuje oznako za pametne kazalce, ki imajo edinstveno lastništvo. Zdaj je izdano opozorilo o visečih referencah na te vrste pametnih kazalcev;
  • odpravljene težave z obdelavo parametra —cppcheck-build-dir;
  • htmlreport lahko zdaj prikaže podatke o avtorju (z uporabo git blame);
  • razširjena opozorila o spremenljivkah, ki niso konstantne, a bi lahko bile;
  • Odpravljene so bile nakopičene napake in pomanjkljivosti analizatorja.

Poleg tega so bila preverjanja iz Misra C 2012, vključno z dopolnitvijo 1 in dopolnitvijo 2, v celoti izvedena, razen pravil 1.1, 1.2 in 17.3. Preverjanja 1.1 in 1.2 mora opraviti prevajalnik. Preverjanje 17.3 lahko izvede prevajalnik, kot je GCC.

Vir: opennet.ru

Dodaj komentar