Ero sivun ”Valgrind” versioiden välillä

Linux.fista
Siirry navigaatioon Siirry hakuun
Ei muokkausyhteenvetoa
 
Rivi 13: Rivi 13:


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





Versio 16. huhtikuuta 2007 kello 23.52

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 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!