Ero sivun ”Valgrind” versioiden välillä
Siirry navigaatioon
Siirry hakuun
p
helgrind, wikitystä
p (tyhjä rivi pois sivun yläreunasta) |
p (helgrind, wikitystä) |
||
Rivi 1: | Rivi 1: | ||
{{ Ohjelma | nimi=valgrind | kuva= | kuvateksti= | lisenssi=[[GPL]]| 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 Linuxille, joka tukee x86-, AMD64-, ppc- ja ppc64-prosessorityyppejä. | |||
== Käyttö == | == Käyttö == | ||
Rivi 7: | Rivi 8: | ||
valgrind ./ohjelma | valgrind ./ohjelma | ||
Tämän jälkeen | Tämän jälkeen Valgrind tulostaa, oletuksena standarditulostusvirtaan, mm. hyödyllistä tietoa ohjelman muistinkäytön puutteista, jos niitä on. | ||
===Työkalut=== | ===Työkalut=== | ||
Mikäli haluat käyttää jotain muuta työkalua kuin memcheck, käytä valitsinta --tool=<työkalu>. | Mikäli haluat käyttää jotain muuta työkalua kuin memcheck, käytä valitsinta <tt>--tool=<työkalu></tt>. | ||
Valittavana on seuraavat työkalut: | Valittavana on seuraavat työkalut: | ||
*Memcheck, erinomainen työkalu muistinhallinnan virheiden löytämiseen. | * Memcheck, erinomainen työkalu muistinhallinnan virheiden löytämiseen. | ||
* Cachegrind, työkalu, joka kertoo kuinka hyvin ohjelmasi hyödyntää prosessorivälimuistia. | |||
*Cachegrind, työkalu, joka kertoo kuinka hyvin ohjelmasi hyödyntää prosessorivälimuistia. | * Callgrind, työkalu, joka antaa kehittäjälle olennaista tietoa ohjelman eri osien käyttämistä prosessoriresursseista . | ||
* Massif, työkalu ohjelman dynaamisesti varattavan muistin käytön profilointiin. | |||
*Callgrind, työkalu, joka antaa kehittäjälle olennaista tietoa ohjelman eri osien käyttämistä prosessoriresursseista | * Helgrind, synkronointivirheiden etsimiseen POSIX-säikeitä käyttävistä ohjelmista. | ||
*Massif, työkalu ohjelman dynaamisesti varattavan muistin käytön profilointiin | |||
*Helgrind, | |||
== Tulosteen tulkinta == | == Tulosteen tulkinta == | ||
Rivi 29: | Rivi 26: | ||
Valgrindin tulostamien rivien alussaoleva ==[[PID]]== kertoo senhetkisen ajettavan prosessin prosessitunnuksen. | Valgrindin tulostamien rivien alussaoleva ==[[PID]]== kertoo senhetkisen ajettavan prosessin prosessitunnuksen. | ||
Ohjelman oma tuloste taas tulostuu sellaisenaan ilman tätä merkintää. | Ohjelman oma tuloste taas tulostuu sellaisenaan ilman tätä merkintää. | ||
===tool=memcheck=== | ===tool=memcheck=== | ||
Rivi 37: | Rivi 33: | ||
Merkinnän jälkeen tulostuu kutsupino, joka kertoo, missä virhe tapahtuu. Esimerkiksi: | Merkinnän jälkeen tulostuu kutsupino, joka kertoo, missä virhe tapahtuu. Esimerkiksi: | ||
==12393== at 0x80483FA: main (testi.c:7) | ==12393== at 0x80483FA: main (testi.c:7) | ||
kertoo, että virhe tapahtuu suoritettavan ohjelman kohdassa 0x80483FA, funktiossa main(), lähdekooditiedostossa testi.c ja rivillä 7. | kertoo, että virhe tapahtuu suoritettavan ohjelman kohdassa 0x80483FA, funktiossa <tt>main()</tt>, lähdekooditiedostossa testi.c ja rivillä 7. | ||
==16340== Address 0x416702D is 1 bytes after a block of size 4 alloc'd | ==16340== Address 0x416702D is 1 bytes after a block of size 4 alloc'd | ||
Rivi 46: | Rivi 42: | ||
==18096== Conditional jump or move depends on uninitialised value(s) | ==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ä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! | Tässä vikana voi olla esimerkiksi unohtunut <tt>= NULL</tt> -sijoitus olemattomalle oliolle, kun olion ja <tt>NULL</tt>:n vertailua käytetään ehtona olion käsittelylle. Kannattaa kuitenkin välttää logiikkavirheiden peittämistä mielivaltaisella alustamisella! | ||
===Yhteenveto ohjelman muistinkäytöstä=== | ===Yhteenveto ohjelman muistinkäytöstä=== | ||
Rivi 59: | Rivi 55: | ||
==8843== checked 53,100 bytes. | ==8843== checked 53,100 bytes. | ||
Käyttämällä valitsinta <tt>--leak-check=full</tt> saadaan tietoa menetetystä muistista: | |||
Käyttämällä valitsinta --leak-check=full saadaan tietoa menetetystä muistista: | |||
==8843== 4 bytes in 1 blocks are definitely lost in loss record 1 of 1 | ==8843== 4 bytes in 1 blocks are definitely lost in loss record 1 of 1 | ||
Rivi 87: | Rivi 82: | ||
== Aiheesta muualla == | == Aiheesta muualla == | ||
*[http://jumi.lut.fi/~paalanen/htyot/valgrind.html Valgrind - muistidebuggeri] -opas | *[http://jumi.lut.fi/~paalanen/htyot/valgrind.html Valgrind - muistidebuggeri] -opas | ||
== Katso myös == | == Katso myös == | ||
*[[Gdb]] | *[[Gdb]] | ||
[[Luokka:Kehitystyökalut]] | [[Luokka:Kehitystyökalut]] |