Lansarea cppcheck 2.6, un analizor de cod static pentru limbajele C++ și C

A fost lansată o nouă versiune a analizorului de cod static cppcheck 2.6, care vă permite să identificați diferite clase de erori de cod în limbajele C și C++, inclusiv atunci când utilizați sintaxa non-standard, tipică pentru sistemele încorporate. Este furnizată o colecție de pluginuri prin care cppcheck este integrat cu diverse sisteme de dezvoltare, integrare continuă și testare și oferă, de asemenea, caracteristici precum verificarea conformității codului cu stilul de cod. Pentru a analiza codul, puteți utiliza fie propriul dvs. parser, fie un parser extern de la Clang. Include, de asemenea, scriptul donate-cpu.py pentru a oferi resurse locale pentru a face munca de colaborare de revizuire a codului pentru pachetele Debian. Codul sursă al proiectului este distribuit sub licența GPLv3.

Dezvoltarea cppcheck este axată pe identificarea problemelor asociate cu comportamentul nedefinit și utilizarea modelelor care sunt periculoase din punct de vedere al siguranței. Scopul este, de asemenea, de a minimiza falsele pozitive. Printre problemele identificate: pointeri către obiecte inexistente, împărțiri cu zero, depășiri de numere întregi, operații incorecte de deplasare a biților, conversii incorecte, probleme la lucrul cu memoria, utilizarea incorectă a STL, dereferințe de pointer nul, utilizarea verificărilor după accesul efectiv la buffer, depășiri de buffer, utilizarea variabilelor neinițializate.

În noua versiune:

  • Următoarele verificări au fost adăugate miezului analizorului:
    • absența unui operator de retur în corpul funcției;
    • înregistrarea datelor suprapuse, definirea comportamentului nedefinit;
    • valoarea comparată este în afara reprezentării valorii a tipului;
    • optimizarea copiei nu se aplică pentru returnarea std::move(local);
    • fișierul nu poate fi deschis simultan pentru citire și scriere în fluxuri diferite (stream);
  • pentru platformele Unix, a adăugat suport pentru afișarea mesajelor de diagnosticare în diferite culori;
  • a adăugat analiză simbolică pentru ValueFlow. Utilizează delta simplă atunci când calculează diferența dintre două variabile necunoscute;
  • regulile folosite pentru lista de jetoane „define” se pot potrivi și cu #include;
  • eticheta de bibliotecă poate conține acum o etichetă , și, în consecință, funcțiile gratuite, care pot accepta containere precum std::size, std::empty, std::begin, std::end etc. poate specifica randamentul sau acțiunea pentru conectori;
  • eticheta de bibliotecă poate conține acum o etichetă pentru indicatoarele inteligente care au o proprietate unică. Acum este emis un avertisment despre referințele suspendate la aceste tipuri de pointere inteligente;
  • probleme rezolvate la procesarea parametrului —cppcheck-build-dir;
  • htmlreport poate afișa acum informații despre autor (folosind git blame);
  • avertismente extinse despre variabile care nu sunt constante, dar ar putea fi;
  • Erorile și deficiențele acumulate ale analizorului au fost corectate.

În plus, verificările de la Misra C 2012, inclusiv amendamentul 1 și amendamentul 2, au fost pe deplin implementate, cu excepția regulilor 1.1, 1.2 și 17.3. Verificările 1.1 și 1.2 trebuie efectuate de compilator. Verificarea 17.3 poate fi efectuată de un compilator precum GCC.

Sursa: opennet.ru

Adauga un comentariu