Cppcheck
Cppcheck | |
Fejlesztő | A Cppcheck fejlesztői |
Legfrissebb stabil kiadás | 2.15.0 (stabil verzió, 2024. augusztus 31.)[1] |
Programozási nyelv | C++ |
Operációs rendszer | Cross-platform |
Kategória | Statikus kódanalízis |
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
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
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
- Puffertúlcsordulás
- Memóriadebugger
- Szoftvertesztelés
- Statikus kódelemző szoftverek
Hivatkozások
- ↑ Release Cppcheck-2.15 (angol nyelven), 2024. augusztus 31. (Hozzáférés: 2024. augusztus 31.)
Külső hivatkozások
- A program honlapja[halott link]
- SourceForge project lap
- Informatikai portál • összefoglaló, színes tartalomajánló lap