Cppcheck

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]

Funkce

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

Vlastnosti statické analýzy

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.

Použití

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/

Příklad kontroly souboru

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

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

Integrace s vývojovými nástroji

Podporuje integraci s různými vývojovými nástroji [10] :

Viz také

Poznámky

  1. Cppcheck-2.9
  2. Cppcheck - Nástroj pro statickou analýzu kódu C/C++ . cppcheck.sourceforge.net. Získáno 21. ledna 2016. Archivováno z originálu 18. ledna 2016.
  3. ↑ 1 2 3 4 Manuál pro Cppcheck verze 1.75 . Získáno 21. ledna 2016. Archivováno z originálu 5. března 2016.
  4. cppcheck/Wiki/ListOfChecks . sourceforge.net. Získáno 21. ledna 2016. Archivováno z originálu 26. prosince 2015.
  5. danmar/cppcheck-rules . GitHub. Získáno 21. ledna 2016. Archivováno z originálu 24. prosince 2015.
  6. danmar/cppcheck - doplňky . GitHub. Získáno 21. ledna 2016. Archivováno z originálu 24. prosince 2015.
  7. ↑ 1 2 Manpage Ubuntu: cppcheck - Nástroj pro statickou analýzu kódu C/C++ . manpages.ubuntu.com. Získáno 31. ledna 2016. Archivováno z originálu 25. dubna 2016.
  8. Daniel Marjamaki. Psaní pravidel Cppcheck. Část 2 - Reprezentace dat Cppcheck  (anglicky)  : site. - 2010. Archivováno 13. března 2016.
  9. cppcheck / Novinky: cppcheck-1.33 . sourceforge.net. Získáno 8. března 2016. Archivováno z originálu dne 14. března 2016.
  10. cppcheck/Wiki/Home . sourceforge.net. Datum přístupu: 21. ledna 2016. Archivováno z originálu 27. prosince 2015.
  11. FAQ -  (anglicky) . codex.com. Datum přístupu: 31. ledna 2016. Archivováno z originálu 31. ledna 2016.
  12. CoderGears, https://www.corgears.com/home . CppDepend :: Dosáhněte vyšší kvality kódu C/C++ . www.cppdepend.com. Datum přístupu: 31. ledna 2016. Archivováno z originálu 17. února 2016.
  13. Automatická analýza statického kódu před nahráním kódu . Omerez. Datum přístupu: 21. ledna 2016. Archivováno z originálu 21. ledna 2016.

Odkazy