Cppcheck | |
---|---|
Typ | Analyzátor statického kódu |
Zapsáno v | C++ |
Operační systém | Operační systém podobný Unixu |
První vydání | 8. května 2007 |
Nejnovější verze | |
Licence | GPLv3 |
webová stránka | cppcheck.sourceforge.net |
Cppcheck je statický analyzátor kódu pro jazyk C / C++ , navržený tak, aby našel chyby, které nejsou detekovány kompilátory. Hlavním cílem projektu je minimalizovat počet falešných poplachů při hledání chyb [2] .
Analyzátor je schopen kontrolovat nestandardní části kódu, včetně použití rozšíření kompilátoru , inline assembleru atd. [3]
Detekuje různé typy chyb v programech [4] .
Umožňuje také stahovat a propojovat pravidla [5] a doplňky [6] z repozitářů cppcheck. Vlastní pravidla pro kontroly lze přidat pomocí regulárních výrazů [3] .
Je možné upřesnit standard, kterému kontrolovaný kód odpovídá. Podporovány jsou následující standardy: C89 , C99 , C11 , C++03 , C++11 , POSIX . Zároveň můžete zadat několik standardů najednou (například C11 a POSIX) [7] .
Kromě standardu můžete určit cílovou platformu pro přesnější detekci chyb. Každá platforma definuje velikosti pro základní datové typy a datové typy specifické pro platformu [3] . Mezi dostupnými můžete zadat operační systém podobný UNIXu nebo operační systém Windows s bitovou hloubkou 32 nebo 64 bitů [7] .
Před provedením statické analýzy je zdrojový kód převeden na reprezentaci vhodnou pro další analýzu. Program odstraní všechny komentáře, nahradí makra jejich definicemi, nahradí všechny předefinice typů původními datovými typy a převede kód do jediného stylu. Pokud jsou známé hodnoty proměnných, pak místo názvů proměnných jsou nahrazeny jejich hodnoty. Názvy proměnných jsou přidávány k jejich jedinečným identifikátorům v programu, což zjednodušuje další analýzu použití proměnných. Může být například int a;nahrazena, int a@1;pokud je proměnná deklarována jako první v programu. Pro usnadnění analýzy jsou také provedena další zjednodušení kódu. Dalším krokem je kontrola kódu podle pravidel načtených do programu, která odpovídají kódu se vzory kritických a stylových chyb. Nejjednodušší pravidla mohou být založena na použití regulárních výrazů [8] .
Protože nedochází ke skutečnému provedení kódu, chybové zprávy generované analyzátorem mohou ve skutečnosti ukazovat na správně napsaný kód, což se nazývá falešné poplachy. Existují také situace, kdy se nalezená chyba nemůže nikdy projevit během provádění kódu.
Práce s Cppcheck se provádí z příkazového řádku. Od verze 1.33 je k dispozici také multiplatformní GUI napsané v Qt [9] .
Pro analýzu jednoho nebo více zdrojových souborů stačí spustit program cppcheck a předat mu cesty k souborům, které mají být zkontrolovány, jako argumenty. Pokud zadáte adresář místo názvu souboru, program bude rekurzivně procházet adresář a analyzovat všechny zkompilované soubory v něm [3] .
Příklad spuštění analýzy několika souborů a adresáře v operačních systémech typu UNIX :
cppcheck test1.c test2.c relativní/cesta/test3.c /absolutní/cesta/test4.c projekt/src/Zvažte příklad programu v jazyce C s chybou, kvůli které je index pole a jeho velikost obrácené. Soubor test.c:
#include <stdlib.h> #include <stdio.h> int main () { znaky [ 255 ] ; s [ 255 ] = '\0' ; return EXIT_SUCCESS ; }Chcete-li zkontrolovat soubor test.cna chyby pomocí Cppcheck, musíte provést následující příkaz:
cppcheck test.cPo provedení příkazu se při přístupu k proměnné zobrazí chybová zpráva mimo hranice s:
[test.c:7]: (error) Array 's[255]' accessed at index 255 which is out of bounds.
Podporuje integraci s různými vývojovými nástroji [10] :