Cppcheck

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]

Jellemzők

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 jellemzői

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.

Használat

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/

Példa egy fájl ellenőrzésére

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

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

Integráció fejlesztőeszközökkel

Támogatja a különféle fejlesztőeszközökkel való integrációt [10] :

Lásd még

Jegyzetek

  1. Cppcheck-2.9
  2. Cppcheck – Statikus C/C++ kódelemzési eszköz . cppcheck.sourceforge.net. Letöltve: 2016. január 21. Az eredetiből archiválva : 2016. január 18..
  3. ↑ 1 2 3 4 Kézikönyv a Cppcheck 1.75-ös verziójához . Letöltve: 2016. január 21. Az eredetiből archiválva : 2016. március 5..
  4. cppcheck/Wiki/ListOfChecks . sourceforge.net. Letöltve: 2016. január 21. Az eredetiből archiválva : 2015. december 26..
  5. danmar/cppcheck-rules . GitHub. Letöltve: 2016. január 21. Az eredetiből archiválva : 2015. december 24..
  6. danmar/cppcheck - add ons . GitHub. Letöltve: 2016. január 21. Az eredetiből archiválva : 2015. december 24..
  7. ↑ 1 2 Ubuntu Manpage: cppcheck - Eszköz statikus C/C++ kódelemzéshez . manpages.ubuntu.com. Letöltve: 2016. január 31. Az eredetiből archiválva : 2016. április 25..
  8. Daniel Marjamaki. Cppcheck szabályok írása. 2. rész – A Cppcheck adatábrázolása  (angolul)  : site. - 2010. Archiválva : 2016. március 13.
  9. cppcheck / Hírek: cppcheck-1.33 . sourceforge.net. Letöltve: 2016. március 8. Az eredetiből archiválva : 2016. március 14.
  10. cppcheck/Wiki/Home . sourceforge.net. Hozzáférés dátuma: 2016. január 21. Az eredetiből archiválva : 2015. december 27.
  11. GYIK -  (eng.) . codex.com. Hozzáférés dátuma: 2016. január 31. Az eredetiből archiválva : 2016. január 31.
  12. CoderGears, https://www.codergears.com/home . CppDepend :: Magasabb C/C++ kódminőség elérése . www.cppdepend.com. Hozzáférés dátuma: 2016. január 31. Az eredetiből archiválva : 2016. február 17.
  13. Automatikus statikus kódelemzés a kód feltöltése előtt . Omerez. Hozzáférés dátuma: 2016. január 21. Az eredetiből archiválva : 2016. január 21.

Linkek