Muokataan sivua Valgrind

Siirry navigaatioon Siirry hakuun
Varoitus: Et ole kirjautunut sisään. IP-osoitteesi näkyy julkisesti kaikille, jos muokkaat. Jos kirjaudut sisään tai luot tunnuksen, muokkauksesi yhdistetään käyttäjänimeesi ja saat paremman käyttökokemuksen.

Kumoaminen voidaan suorittaa. Varmista alla olevasta vertailusta, että haluat saada aikaan tämän lopputuloksen, ja sen jälkeen julkaise alla näkyvät muutokset.

Nykyinen versio Oma tekstisi
Rivi 1: Rivi 1:
{{Ohjelma
{{ Ohjelma | nimi=valgrind  | kuva= | kuvateksti= | lisenssi=[[GPL]]| käyttöliittymä=teksti | kotisivu=[http://valgrind.org valgrind.org] }}
| nimi=Valgrind
Valgrind on helppokäyttöinen ja hyödyllinen muistidebuggaus- ja profilointityökalu linuxille, joka tukee x86, AMD64, ppc ja ppc64 -prosessorityyppejä.  
| 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 Linuxille, joka tukee x86-, AMD64-, ppc- ja ppc64-prosessorityyppejä.  
 
== Asennus ==
{{Asenna|Valgrind|valgrind}}


== Käyttö ==
== Käyttö ==
Rivi 18: Rivi 7:
  valgrind ./ohjelma
  valgrind ./ohjelma


Tämän jälkeen Valgrind tulostaa, oletuksena standarditulostusvirtaan, mm. hyödyllistä tietoa ohjelman muistinkäytön puutteista, jos niitä on.
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 <tt>--tool=<työkalu></tt>.
Mikäli haluat käyttää jotain muuta työkalua kuin memcheck, käytä valitsinta --tool=<työkalu>.


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.
 
* callgrind, työkalu, joka antaa kehittäjälle olennaista tietoa ohjelman eri osien käyttämistä prosessoriresursseista .
*Cachegrind, työkalu, joka kertoo kuinka hyvin ohjelmasi hyödyntää prosessorivälimuistia.
* massif, työkalu ohjelman dynaamisesti varattavan muistin käytön profilointiin.
 
* helgrind, synkronointivirheiden etsimiseen POSIX-säikeitä käyttävistä ohjelmista.
*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
 
*Helgrind,


== Tulosteen tulkinta ==
== Tulosteen tulkinta ==
Rivi 36: Rivi 29:
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 43: Rivi 37:
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 <tt>main()</tt>, lähdekooditiedostossa testi.c ja rivillä 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
  ==16340==  Address 0x416702D is 1 bytes after a block of size 4 alloc'd
Rivi 52: Rivi 46:


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


===Yhteenveto ohjelman muistinkäytöstä===
===Yhteenveto ohjelman muistinkäytöstä===
Rivi 65: Rivi 59:
  ==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 92: Rivi 87:


== Aiheesta muualla ==
== Aiheesta muualla ==
*[http://jumi.lut.fi/~paalanen/htyot/valgrind.html Valgrind - muistidebuggeri] -opas {{vanhentunut linkki}}
*[http://jumi.lut.fi/~paalanen/htyot/valgrind.html Valgrind - muistidebuggeri] -opas
 
== Katso myös ==
== Katso myös ==
*[[Gdb]]
*[[Gdb]]
*[[Strace]]
[[Luokka:Kehitystyökalut]]
[[Luokka:Kehitystyökalut]]
Wikin materiaali on kaikkien vapaasti käytettävissä Creative Commons 3.0 - nimi mainittava -lisenssin alaisuudessa. TEKIJÄNOIKEUDEN ALAISEN MATERIAALIN KÄYTTÄMINEN ILMAN LUPAA ON EHDOTTOMASTI KIELLETTYÄ!

Muokataksesi tätä sivua vastaa alla olevaan kysymykseen (lisätietoja):

Peruuta Muokkausohjeet (avautuu uuteen ikkunaan)

Tämä sivu kuuluu seuraavaan piilotettuun luokkaan:

Noudettu kohteesta ”https://www.linux.fi/wiki/Valgrind