Valgrind

Linux.fista
Versio hetkellä 16. huhtikuuta 2007 kello 23.47 – tehnyt 82.130.50.97 (keskustelu)
(ero) ← Vanhempi versio | Nykyinen versio (ero) | Uudempi versio → (ero)
Siirry navigaatioon Siirry hakuun
valgrind
Käyttöliittymä teksti
Lisenssi Gnu General Public License
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 taan 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!