Ero sivun ”Valgrind” versioiden välillä

Linux.fista
Siirry navigaatioon Siirry hakuun
Ei muokkausyhteenvetoa
Rivi 1: Rivi 1:
{{ Ohjelma | nimi=valgrind  | kuva= |  kuvateksti= | lisenssi=Gnu General Public License | käyttöliittymä=teksti | kotisivu=[http://valgrind.org valgrind.org] }}
{{ Ohjelma | nimi=valgrind  | kuva= |  kuvateksti= | lisenssi=[[GPL]]| käyttöliittymä=teksti | kotisivu=[http://valgrind.org valgrind.org] }}


Valgrind on helppokäyttöinen ja hyödyllinen muistidebuggaus- ja profilointityökalu.  
Valgrind on helppokäyttöinen ja hyödyllinen muistidebuggaus- ja profilointityökalu.  

Versio 17. huhtikuuta 2007 kello 00.01

valgrind
Käyttöliittymä teksti
Lisenssi GPL
Kotisivu valgrind.org

Valgrind on helppokäyttöinen ja hyödyllinen muistidebuggaus- ja profilointityökalu.

Käyttö

Valgrind käynnistetään kuten Gdb

valgrind ./ohjelma

Tämän jälkeen valgrind tulostaa, oletuksena standarditulostusvirtaan, mm. hyödyllistä tietoa ohjelman muistinkäytön puutteista, jos niitä on.

Tulosteen tulkinta

Valgrindin tulostamien rivien alussaoleva ==PID== kertoo senhetkisen ajettavan prosessin prosessitunnuksen. Ohjelman oma tuloste taas tulostuu sellaisenaan ilman tätä merkintää.


tool=memcheck

==12799== Invalid read of size 4

Edellinen merkintä kertoo, että muistista on luettu alue standardikirjastolta varattujen muistialueiden ulkopuolelta. "of size 4" kertoo tässä, että alue on 4 size_t -yksikön kokoinen, eli tyypillisesti 4 tavua, 32-bittiä. Tämä on ehdottomasti virhe, tarkista esimerkiksi taulukoiden indeksoinnit. Merkinnän jälkeen tulostuu kutsupino, joka kertoo, missä virhe tapahtuu. Esimerkiksi:

==12393==    at 0x80483FA: main (testi.c:7)

kertoo, että virhe tapahtuu suoritettavan ohjelman kohdassa 0x80483FA, funktiossa main(), lähdekooditiedostossa testi.c ja rivillä 7.

==16340==  Address 0x416702D is 1 bytes after a block of size 4 alloc'd

Kertoo luetun muistiosoitteen ja hyödyllistä tietoa sen sijainnista suhteessa varattuun muistiin.

==17298== Invalid write of size 1

Merkintä kertoo, että muistiin on kirjoitettu alue varattujen muistialueiden ulkopuolelta. Tulkinta on lähes täysin vastaava edelliseen nähden.

==18096== Conditional jump or move depends on uninitialised value(s)

Tämä virhe syntyy, kun koodissa on käytetty if, for tai while -ohjauslausekkeiden ehtona muuttujaa, jonka muistialue on alustamaton tai jonka muistialueen sisältö ei ole määräytynyt täsmällisesti ohjelman ajon aikana.

Tässä vikana voi olla esimerkiksi unohtunut = NULL -sijoitus olemattomalle oliolle, kun olion ja NULL:n vertailua käytetään ehtona olion käsittelylle. Kannattaa kuitenkin välttää logiikkavirheiden peittämistä mielivaltaisella alustamisella!