Ero sivun ”Cppcheck” versioiden välillä

Linux.fista
Siirry navigaatioon Siirry hakuun
(Ak: Uusi sivu: {{ Ohjelma | nimi=Cppcheck | kuva= | kuvateksti= | lisenssi=GPL| käyttöliittymä=teksti | kotisivu=[http://cppcheck.wiki.sourceforge.net/] }} Cppcheck on ohjelmointityökalu, ...)
 
p (<syntaxhighlight>)
 
(5 välissä olevaa versiota 4 käyttäjän tekeminä ei näytetä)
Rivi 1: Rivi 1:
{{ Ohjelma | nimi=Cppcheck | kuva= | kuvateksti= | lisenssi=[[GPL]]| käyttöliittymä=teksti | kotisivu=[http://cppcheck.wiki.sourceforge.net/] }}
{{Ohjelma
Cppcheck on ohjelmointityökalu, millä voi etsiä virheitä C ja C++ ohjelmien lähdekoodista staattisesti. Yleisimmät virheet mitä Cppcheck löytää ovat yhden funktion sisällä tapahtuvat muistivuodot, mutta sillä voi etsiä myös monia muita tyypillisiä virheitä.
| nimi=Cppcheck
| kuva=
| kuvateksti=
| lisenssi=[[GPL]]
| käyttöliittymä=teksti
| kotisivu=[http://cppcheck.sourceforge.net/ cppcheck.sourceforge.net]
}}


Cppcheck on löytänyt 20 varmistettua ja korjattua bugia Linuxin kernelistä ja monia muita muista tunnetuista avoimen lähdekoodin projekteista.  
'''Cppcheck''' on vapaa ohjelmointityökalu, jolla voi etsiä virheitä C- ja C++-ohjelmien lähdekoodista staattisesti. Yleisimmät Cppcheckin löytämät virheet ovat yhden funktion sisällä tapahtuvat muistivuodot, mutta sillä voi etsiä myös monia muita tyypillisiä virheitä.  


Cppcheck on avoimen lähdekoodin projekti ja se on GPL lisenssin alainen. Se on kirjoitettu C++:lla ja sen sivuja ylläpitää Sourceforge.net.
Cppcheck on esimerkiksi löytänyt 21 varmistettua ja korjattua bugia Linuxin [[ydin|ytimestä]] ja monia muita muista tunnetuista avoimen lähdekoodin projekteista.  


== Käyttö ==
== Käyttö ==
  cppcheck tarkistettava_hakemisto/
  cppcheck tarkistettava_hakemisto/
tai
cppcheck tarkistettava_tiedosto.cpp


Tämän jälkeen tulostuu tilannetietoa siitä mitä tiedostoa tarkistetaan ja väliin tulostuu virheitä jos niitä löytyy.
Tämän jälkeen tulostuu tilannetietoa siitä mitä tiedostoa tarkistetaan ja väliin tulostuu virheitä jos niitä löytyy.


== Esimerkki ==
== Esimerkki ==
<source lang="c">
Tutkitaan seuraavaa ohjelmaa Cppcheckillä:
#include <stdlib.h>
 
int main()
<syntaxhighlight lang="c++">
void f( std::list<int> foo, std::list<int> bar )
{
{
   int *a;
   char *del = new char[10];
   char b[2];
   std::list<int>::const_iterator it;
   a = malloc(100);
   for (it = foo.begin(); it != bar.end(); ++it)
   b[4] = 0;
  {
   return 0;
    bar.push_back( *it );
   }
  delete [] del;
   del[3] = 0;
}
}


</source>
</syntaxhighlight>


Cppcheck:n tulostus:
Cppcheck:n tulostus:
<pre><nowiki>
<pre><nowiki>
$ ./cppcheck a.c
$ ./cppcheck a.c
Checking a.c...
$ ./cppcheck example.cpp
[a.c:8]: Memory leak: a
Checking example.cpp...
[a.c:7]: Array index out of bounds
[example.cpp:11]: (error) Using 'del' after it is deallocated / released
[example.cpp:5]: (error) Same iterator is used with both foo and bar
</nowiki></pre>
</nowiki></pre>


Korjattu lähdekoodi:
Korjattu lähdekoodi:
<source lang="c">
<syntaxhighlight lang="c++">
#include <stdlib.h>
void f( std::list<int> foo, std::list<int> bar )
int main()
{
{
   int *a;
   char *del = new char[10];
   char b[5];
   std::list<int>::const_iterator it;
   a = malloc(100);
   for (it = foo.begin(); it != foo.end(); ++it)
  b[4] = 0;
   {
   free( a );
    bar.push_back( *it );
   return 0;
   }
  del[3] = 0
  delete [] del;
}
}


</source>
</syntaxhighlight>


== Aiheesta muualla ==
== Aiheesta muualla ==
Rivi 52: Rivi 68:
*[https://sourceforge.net/projects/cppcheck Projektisivu]
*[https://sourceforge.net/projects/cppcheck Projektisivu]
*[http://en.wikipedia.org/wiki/Cppcheck Englanninkielinen Wikipedia-sivu]
*[http://en.wikipedia.org/wiki/Cppcheck Englanninkielinen Wikipedia-sivu]
== Katso myös ==
== Katso myös ==
*[[Valgrind]]
*[[Valgrind]]
[[Luokka:Kehitystyökalut]]
[[Luokka:Kehitystyökalut]]

Nykyinen versio 18. helmikuuta 2022 kello 09.31

Cppcheck
Käyttöliittymä teksti
Lisenssi GPL
Kotisivu cppcheck.sourceforge.net

Cppcheck on vapaa ohjelmointityökalu, jolla voi etsiä virheitä C- ja C++-ohjelmien lähdekoodista staattisesti. Yleisimmät Cppcheckin löytämät virheet ovat yhden funktion sisällä tapahtuvat muistivuodot, mutta sillä voi etsiä myös monia muita tyypillisiä virheitä.

Cppcheck on esimerkiksi löytänyt 21 varmistettua ja korjattua bugia Linuxin ytimestä ja monia muita muista tunnetuista avoimen lähdekoodin projekteista.

Käyttö[muokkaa]

cppcheck tarkistettava_hakemisto/

tai

cppcheck tarkistettava_tiedosto.cpp

Tämän jälkeen tulostuu tilannetietoa siitä mitä tiedostoa tarkistetaan ja väliin tulostuu virheitä jos niitä löytyy.

Esimerkki[muokkaa]

Tutkitaan seuraavaa ohjelmaa Cppcheckillä:

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:n tulostus:

$ ./cppcheck a.c
$ ./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

Korjattu lähdekoodi:

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;
}

Aiheesta muualla[muokkaa]

Katso myös[muokkaa]