Cppcheck | |
---|---|
Sorts | Statisk kodanalysator |
Skrivet i | C++ |
Operativ system | Unix-liknande operativsystem |
Första upplagan | 8 maj 2007 |
senaste versionen |
|
Licens | GPLv3 |
Hemsida | cppcheck.sourceforge.net |
Cppcheck är en statisk kodanalysator för C / C++-språket , designad för att hitta fel som inte upptäcks av kompilatorer. Huvudmålet med projektet är att minimera antalet falska positiva resultat vid felsökning [2] .
Analysatorn kan kontrollera icke-standardiserade kodsektioner, inklusive användning av kompilatortillägg , inline assembler , etc. [3]
Upptäcker olika typer av fel i program [4] .
Det låter dig också ladda ner och ansluta regler [5] och tillägg [6] från cppcheck-förråd. Anpassade regler för kontroller kan läggas till via reguljära uttryck [3] .
Det är möjligt att förfina den standard som den kontrollerade koden överensstämmer med. Följande standarder stöds: C89 , C99 , C11 , C++03 , C++11 , POSIX . Samtidigt kan du specificera flera standarder samtidigt (till exempel C11 och POSIX) [7] .
Utöver standarden kan du ange målplattformen för mer exakt feldetektering. Varje plattform definierar storlekar för basdatatyper och plattformsspecifika datatyper [3] . Bland de tillgängliga kan du ange ett UNIX-liknande operativsystem eller ett Windows -operativsystem med ett bitdjup på 32 eller 64 bitar [7] .
Innan statisk analys utförs omvandlas källkoden till en representation som lämpar sig för vidare analys. Programmet tar bort alla kommentarer, ersätter makron med deras definitioner, ersätter alla typomdefinieringar med ursprungliga datatyper och tar koden till en enda stil. Om värdena på variablerna är kända, istället för namnen på variablerna, ersätts deras värden. Variabelnamn läggs till deras unika identifierare inom programmet, vilket förenklar ytterligare analys av användningen av variabler. Den kan till exempel int a;ersättas med int a@1;om variabeln deklareras först i programmet. Andra kodförenklingar görs också för att underlätta analysen. Nästa steg är att kontrollera koden enligt reglerna som laddas in i programmet, som matchar koden med mönster av kritiska fel och stilfel. De enklaste reglerna kan baseras på användningen av reguljära uttryck [8] .
Eftersom det inte finns någon riktig exekvering av koden kan felmeddelandena som genereras av analysatorn faktiskt peka på korrekt skriven kod, vilket kallas falska positiva. Det finns också situationer när det hittade felet aldrig kan visa sig under kodexekvering.
Arbetet med Cppcheck sker från kommandoraden. Sedan version 1.33 är ett gränssnitt för flera plattformar skrivet i Qt [9] också tillgängligt .
För att analysera en eller flera källfiler räcker det att köra programmet cppcheck och skicka det vägarna till filerna som ska kontrolleras som argument. Om du anger en katalog istället för ett filnamn, kommer programmet rekursivt att gå igenom katalogen och analysera alla kompilerade filer i den [3] .
Ett exempel på att köra analys av flera filer och en katalog på UNIX-liknande operativsystem :
cppcheck test1.c test2.c relativ/sökväg/test3.c /absolute/sökväg/test4.c project/src/Betrakta ett exempel på ett C- program med ett fel på grund av vilket arrayindex och dess storlek är omvända. Fil test.c:
#include <stdlib.h> #include <stdio.h> int main () { tecken [ 255 ] ; s [ 255 ] = '\0' ; returnera EXIT_SUCCESS ; }För att kontrollera en fil test.cför fel med Cppcheck, måste du utföra följande kommando:
cppcheck test.cEfter att du har kört kommandot kommer ett felmeddelande utanför gränserna att visas när du kommer åt variabeln s:
[test.c:7]: (error) Array 's[255]' accessed at index 255 which is out of bounds.
Stöder integration med olika utvecklingsverktyg [10] :