Cppcheck | |
---|---|
Tip de | Analizor de cod static |
Scris in | C++ |
Sistem de operare | Sistem de operare asemănător Unix |
Prima editie | 8 mai 2007 |
ultima versiune | |
Licență | GPLv3 |
Site-ul web | cppcheck.sourceforge.net |
Cppcheck este un analizor de cod static pentru limbajul C / C++ , conceput pentru a găsi erori care nu sunt detectate de compilatori. Scopul principal al proiectului este de a minimiza numărul de fals pozitive la căutarea erorilor [2] .
Analizorul este capabil să verifice secțiuni non-standard de cod, inclusiv utilizarea extensiilor compilatorului , asamblatorului inline etc. [3]
Detectează diverse tipuri de erori în programe [4] .
De asemenea, vă permite să descărcați și să conectați reguli [5] și completări [6] din depozitele cppcheck. Reguli personalizate pentru verificări pot fi adăugate prin intermediul expresiilor regulate [3] .
Este posibil să rafinați standardul cu care se conformează codul verificat. Sunt acceptate următoarele standarde: C89 , C99 , C11 , C++03 , C++11 , POSIX . În același timp, puteți specifica mai multe standarde simultan (de exemplu, C11 și POSIX) [7] .
În plus față de standard, puteți specifica platforma țintă pentru o detectare mai precisă a erorilor. Fiecare platformă definește dimensiuni pentru tipurile de date de bază și tipurile de date specifice platformei [3] . Dintre cele disponibile, puteți specifica un sistem de operare asemănător UNIX sau un sistem de operare Windows cu o adâncime de biți de 32 sau 64 de biți [7] .
Înainte de efectuarea analizei statice , codul sursă este convertit într-o reprezentare convenabilă pentru analiză ulterioară. Programul elimină toate comentariile, înlocuiește macrocomenzile cu definițiile lor, înlocuiește toate redefinirile de tip cu tipuri de date originale și aduce codul la un singur stil. Dacă valorile variabilelor sunt cunoscute, atunci în loc de numele variabilelor, valorile acestora sunt înlocuite. Numele de variabile sunt adăugate la identificatorii lor unici în cadrul programului, ceea ce simplifică analiza ulterioară a utilizării variabilelor. De exemplu, int a;poate fi înlocuit cu int a@1;dacă variabila este declarată prima în program. Alte simplificări de cod sunt, de asemenea, făcute pentru a facilita analiza. Următorul pas este să verificați codul conform regulilor încărcate în program, care potrivesc codul cu modele de erori critice și de stil. Cele mai simple reguli se pot baza pe utilizarea expresiilor regulate [8] .
Deoarece nu există o execuție reală a codului, mesajele de eroare generate de analizor pot indica de fapt codul scris corect, care se numește false pozitive. Există, de asemenea, situații în care eroarea găsită nu se poate manifesta niciodată în timpul execuției codului.
Lucrul cu Cppcheck se face din linia de comandă. Începând cu versiunea 1.33, este disponibilă și o interfață grafică multiplatformă scrisă în Qt [9] .
Pentru a analiza unul sau mai multe fișiere sursă, este suficient să rulați programul cppcheck, trecându-i căile către fișierele care urmează să fie verificate ca argumente. Dacă specificați un director în locul unui nume de fișier, programul va traversa în mod recursiv directorul și va analiza toate fișierele compilate din acesta [3] .
Un exemplu de rulare a analizei mai multor fișiere și a unui director pe sisteme de operare asemănătoare UNIX :
cppcheck test1.c test2.c relative/path/test3.c /absolute/path/test4.c project/src/Luați în considerare un exemplu de program C cu o eroare din cauza căreia indexul matricei și dimensiunea acestuia sunt inversate. Fișier test.c:
#include <stdlib.h> #include <stdio.h> int main () { caractere [ 255 ] ; s [ 255 ] = '\0' ; returnează EXIT_SUCCESS ; }Pentru a verifica un fișier test.cpentru erori folosind Cppcheck, trebuie să executați următoarea comandă:
test cppcheck.cDupă executarea comenzii, va fi afișat un mesaj de eroare în afara limitelor la accesarea variabilei s:
[test.c:7]: (error) Array 's[255]' accessed at index 255 which is out of bounds.
Sprijină integrarea cu diverse instrumente de dezvoltare [10] :