Udgivelse af cppcheck 2.6, en statisk kodeanalysator til C++ og C sprog

En ny version af den statiske kodeanalysator cppcheck 2.6 er blevet frigivet, som giver dig mulighed for at identificere forskellige klasser af fejl i kode i C- og C++-sprogene, herunder ved brug af ikke-standardsyntaks, typisk for indlejrede systemer. En samling af plugins er tilvejebragt, hvorigennem cppcheck er integreret med forskellige udviklings-, kontinuerlige integrations- og testsystemer, og giver også sådanne funktioner som kontrol af kodeoverensstemmelse med kodestilen. For at parse kode kan du bruge enten din egen parser eller en ekstern parser fra Clang. Det inkluderer også donate-cpu.py-scriptet til at give lokale ressourcer til at udføre samarbejde om kodegennemgang for Debian-pakker. Projektets kildekode distribueres under GPLv3-licensen.

Udviklingen af ​​cppcheck er fokuseret på at identificere problemer forbundet med udefineret adfærd og brug af designs, der er farlige ud fra et sikkerhedsmæssigt synspunkt. Målet er også at minimere falske positiver. Blandt de identificerede problemer: pointere til ikke-eksisterende objekter, divisioner med nul, heltalsoverløb, forkerte bitforskydningsoperationer, forkerte konverteringer, problemer med at arbejde med hukommelse, forkert brug af STL, nul pointer-dereferencer, brug af kontroller efter den faktiske adgang til bufferen, bufferoverskridelser, brug af uinitialiserede variable.

I den nye version:

  • Følgende kontroller er blevet tilføjet til analysatorkernen:
    • fravær af en returoperatør i funktionsorganet;
    • registrerer overlappende data, bestemmer udefineret adfærd;
    • den værdi, der sammenlignes, er uden for typens værdirepræsentation;
    • kopioptimering gælder ikke for at returnere std::move(local);
    • filen kan ikke åbnes samtidigt til læsning og skrivning i forskellige streams (stream);
  • til Unix-platforme, tilføjet understøttelse til visning af diagnostiske meddelelser i forskellige farver;
  • tilføjet symbolsk analyse for ValueFlow. Bruger simpelt delta ved beregning af forskellen mellem to ukendte variable;
  • reglerne, der bruges til listen over tokens "define" kan også matche #include;
  • biblioteksmærke kan nu indeholde et tag , og dermed de gratis funktioner, som kan acceptere beholdere som std::size, std::empty, std::begin, std::end osv. kan angive udbytte eller handling for stik;
  • biblioteksmærke kan nu indeholde et tag for smarte pointere, der har unikt ejerskab. Der er nu udsendt en advarsel om dinglende referencer til disse typer smarte pointere;
  • løste problemer med at behandle parameteren —cppcheck-build-dir;
  • htmlreport kan nu vise information om forfatteren (ved hjælp af git blame);
  • udvidede advarsler om variabler, der ikke er konstante, men som kunne være;
  • De akkumulerede fejl og mangler ved analysatoren er blevet rettet.

Derudover er kontrollen fra Misra C 2012, herunder ændring 1 og ændring 2, blevet implementeret fuldt ud, bortset fra reglerne 1.1, 1.2 og 17.3. Kontrol 1.1 og 1.2 skal udføres af compileren. Verifikation 17.3 kan udføres af en compiler såsom GCC.

Kilde: opennet.ru

Tilføj en kommentar