Cppcheck

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]

Caracteristici

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] .

Caracteristicile analizei statice

Î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.

Utilizare

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/

Un exemplu de verificare a unui fișier

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.c

După 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.

Integrare cu instrumente de dezvoltare

Sprijină integrarea cu diverse instrumente de dezvoltare [10] :

Vezi și

Note

  1. Cppcheck-2.9
  2. Cppcheck - Un instrument pentru analiza statică a codului C/C++ . cppcheck.sourceforge.net. Consultat la 21 ianuarie 2016. Arhivat din original pe 18 ianuarie 2016.
  3. ↑ 1 2 3 4 Manual pentru Cppcheck versiunea 1.75 . Preluat la 21 ianuarie 2016. Arhivat din original la 5 martie 2016.
  4. cppcheck/Wiki/ListOfChecks . sourceforge.net. Preluat la 21 ianuarie 2016. Arhivat din original la 26 decembrie 2015.
  5. danmar/cppcheck-rules . GitHub. Preluat la 21 ianuarie 2016. Arhivat din original la 24 decembrie 2015.
  6. danmar/cppcheck - suplimente . GitHub. Preluat la 21 ianuarie 2016. Arhivat din original la 24 decembrie 2015.
  7. ↑ 1 2 Ubuntu Manpage: cppcheck - Instrument pentru analiza codului static C/C++ . manpages.ubuntu.com. Consultat la 31 ianuarie 2016. Arhivat din original la 25 aprilie 2016.
  8. Daniel Marjamaki. Scrierea regulilor Cppcheck. Partea 2 - Reprezentarea datelor Cppcheck  (engleză)  : site. - 2010. Arhivat 13 martie 2016.
  9. cppcheck / Știri: cppcheck-1.33 . sourceforge.net. Preluat la 8 martie 2016. Arhivat din original la 14 martie 2016.
  10. cppcheck/Wiki/Home . sourceforge.net. Data accesului: 21 ianuarie 2016. Arhivat din original pe 27 decembrie 2015.
  11. Întrebări frecvente -  (eng.) . codex.com. Data accesului: 31 ianuarie 2016. Arhivat din original la 31 ianuarie 2016.
  12. CoderGears, https://www.codergears.com/home . CppDepend :: Obține o calitate mai bună a codului C/C++ . www.cppdepend.com. Data accesului: 31 ianuarie 2016. Arhivat din original pe 17 februarie 2016.
  13. Analiza automată a codului static înainte de a încărca codul . Omerez. Data accesului: 21 ianuarie 2016. Arhivat din original pe 21 ianuarie 2016.

Link -uri