Cppcheck | |
---|---|
Típusú | Statikus kódelemző |
Beírva | C++ |
Operációs rendszer | Unix-szerű operációs rendszer |
Első kiadás | 2007. május 8 |
legújabb verzió |
|
Engedély | GPLv3 |
Weboldal | cppcheck.sourceforge.net |
A Cppcheck egy statikus kódelemző a C / C++ nyelvhez , amelyet arra terveztek, hogy megtalálja azokat a hibákat, amelyeket a fordítók nem észlelnek. A projekt fő célja, hogy minimálisra csökkentse a téves pozitív eredmények számát a hibakeresés során [2] .
Az analizátor képes ellenőrizni a nem szabványos kódrészleteket, beleértve a fordítói kiterjesztések használatát , az inline assemblert stb. [3]
Különféle hibákat észlel a programokban [4] .
Lehetővé teszi továbbá a szabályok [5] és kiegészítések [6] letöltését és összekapcsolását a cppcheck tárolókból. Egyéni ellenőrzési szabályok adhatók hozzá reguláris kifejezésekkel [3] .
Lehetőség van finomítani a szabványt, amelyhez az ellenőrzött kód megfelel. A következő szabványok támogatottak: C89 , C99 , C11 , C++03 , C++11 , POSIX . Ugyanakkor egyszerre több szabványt is megadhat (például C11 és POSIX) [7] .
A pontosabb hibaészlelés érdekében a szabványon kívül megadhatja a célplatformot is. Minden platform méreteket határoz meg az alapadattípusokhoz és a platformspecifikus adattípusokhoz [3] . A rendelkezésre állóak között megadhatunk UNIX-szerű operációs rendszert vagy 32 vagy 64 bites bitmélységű Windows operációs rendszert [7] .
A statikus elemzés elvégzése előtt a forráskódot a további elemzéshez kényelmes reprezentációvá alakítják át. A program eltávolítja az összes megjegyzést, lecseréli a makrókat azok definícióival, az összes típus-újradefiníciót eredeti adattípusra cseréli, és a kódot egyetlen stílusba hozza. Ha a változók értéke ismert, akkor a változók neve helyett azok értékeit helyettesítjük. A programon belül a változónevek egyedi azonosítóikhoz kerülnek, ami leegyszerűsíti a változók használatának további elemzését. Például int a;helyettesíthető ezzel, int a@1;ha a változót először deklarálják a programban. Az elemzés megkönnyítése érdekében más kódegyszerűsítéseket is végeznek. A következő lépés a kód ellenőrzése a programba betöltött szabályok szerint, amelyek a kritikus és stílushibák mintáival illesztik a kódot. A legegyszerűbb szabályok reguláris kifejezések használatán alapulhatnak [8] .
Mivel a kód tényleges végrehajtása nem történik meg, az analizátor által generált hibaüzenetek valójában a helyesen megírt kódra mutathatnak, amit hamis pozitívnak neveznek. Vannak olyan helyzetek is, amikor a talált hiba soha nem jelenik meg a kód végrehajtása során.
A Cppcheck használata a parancssorból történik. Az 1.33-as verzió óta elérhető a Qt [9] nyelven írt többplatformos GUI is .
Egy vagy több forrásfájl elemzéséhez elegendő a cppcheck programot futtatni, argumentumként átadva neki az ellenőrizendő fájlok elérési útját. Ha a fájlnév helyett könyvtárat adunk meg, a program rekurzív módon bejárja a könyvtárat, és elemzi az abban található összes lefordított fájlt [3] .
Példa több fájl és egy könyvtár elemzésének futtatására UNIX-szerű operációs rendszereken :
cppcheck test1.c test2.c relatív/path/test3.c /absolute/path/test4.c project/src/Tekintsünk egy példát egy C programra , amelynek hibája miatt a tömb indexe és mérete megfordul. Fájl test.c:
#include <stdlib.h> #include <stdio.h> int main () { karakterek [ 255 ] ; s [ 255 ] = '\0' ; return EXIT_SUCCESS ; }test.cA Cppcheck segítségével a fájl hibáinak ellenőrzéséhez a következő parancsot kell végrehajtania:
cppcheck teszt.cA parancs végrehajtása után a határokon kívüli hibaüzenet jelenik meg a változó elérésekor s:
[test.c:7]: (error) Array 's[255]' accessed at index 255 which is out of bounds.
Támogatja a különféle fejlesztőeszközökkel való integrációt [10] :