Cppcheck

A Wikipédiából, a szabad enciklopédiából
Cppcheck
Fejlesztő A Cppcheck fejlesztői
Legfrissebb stabil
kiadás
1.55
(2012. június 30.)
Legfrissebb fejlesztői kiadás ismeretlen +/-
Programozási nyelv C++
Operációs rendszer Cross-platform
Kategória Statikus kód elemző
Licenc GPL
A Cppcheck weboldala

A Cppcheck egy statikus kódelemző programozási eszköz C és C++ nyelven írt programokhoz. Gyakori programozási hibák és biztonsági problémák felderítésére képes. A segítségével leggyakrabban ún. memóriaszivárgást lehet felfedezni (a lefoglalt memóriát elfelejti felszabadítani a programozó), de összesen nagyjából 20 hibatípus detektálására képes.

A Cppcheck egy C++ nyelven írt szabad szoftver, ami GPL licenc alatt érhető el.

Használat[szerkesztés | forrásszöveg szerkesztése]

A Cppcheck parancssorból használható program. A következő opciókat ismeri (zárójelben az esetleges alternatívák):

  • -I dir Include könyvtárak megadása. Ez az opció ismételhető. Ha az include könyvtár alkönyvtára a forrás könyvtárnak, akkor nincs szükség a megadására.
  • -a (--all) Minden hiba kijelzése. Ezen opció nélkül csak a biztosan felismert hibákat jeleníti meg. Ajánlott bekapcsolni és kézzel kiszűrni a false-positive riasztásokat
  • -f (--force) Erőltetett ellenőrzése a sok konfigurációval rendelkező fájloknál. Az ilyen fájloknál amúgy is van hibaüzenet, így ez az opció nem ajánlott.
  • -q (--quiet) Csendes üzemmód. Csak a megtalált hibákat írja ki, egyéb üzeneteket nem.
  • -s (--style) Kódolási stílus hibákat is megjeleníti. (Ezek nincsenek benne az—all -ban.) Ilyen például az, ha kétszer ellenőrizzük valamiről, hogy NULL-e.
  • -v (--verbose) Részletes üzemmód.
  • --unused-functions A nem használt függvényeket kiírja.
  • -j jobs Többszálú üzemmód. Optimális sebesség érdekében többmagos, többprocesszoros gépen érdemes annyi *jobs*-ot adni, ahány processzormag rendelkezésre áll.
  • --xml XML formátumú eredményt ad.
  • -h (--help) A helpet írja ki a képernyőre.

Egy ajánlott használati mód:

cppcheck -q -a projectkönyvtár

Ez a mód kiírja a hibákat, mindet, de a felesleges futási üzenetektől megkíméli a felhasználót.

Példa[szerkesztés | forrásszöveg szerkesztése]

void f( std::list<int> foo, std::list<int> bar )
{
  char *del = new char[10];
  std::list<int>::const_iterator it;
  for (it = foo.begin(); it != bar.end(); ++it)
  {
    bar.push_back( *it );
  }
 
  delete [] del;
  del[3] = 0;
}

Cppcheck futási eredménye:

$ ./cppcheck example.cpp
Checking example.cpp...
[example.cpp:11]: (error) Using 'del' after it is deallocated / released
[example.cpp:5]: (error) Same iterator is used with both foo and bar

Javított forráskód:

void f( std::list<int> foo, std::list<int> bar )
{
  char *del = new char[10];
  std::list<int>::const_iterator it;
  for (it = foo.begin(); it != foo.end(); ++it)
  {
    bar.push_back( *it );
  }
 
  del[3] = 0;
  delete [] del;
}

Lásd még[szerkesztés | forrásszöveg szerkesztése]

Hivatkozások[szerkesztés | forrásszöveg szerkesztése]


Külső hivatkozások[szerkesztés | forrásszöveg szerkesztése]