Valgrind

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 29. joulukuuta 2020 tarkistetusta versiosta . tarkastukset vaativat 8 muokkausta .
Valgrind
Tyyppi Profiler , muistinkäytön debuggeri
Tekijä Seward, Julian [1]
Kehittäjä Valgrind kehittäjät
Sisään kirjoitettu C [3]
Käyttöjärjestelmä Linux , Mac OS X , Android [2]
uusin versio 3.19.0 ( 11. huhtikuuta 2022 )
Lisenssi GNU yleinen julkinen lisenssi
Verkkosivusto valgrind.org

Valgrind  on työkalu muistin käytön virheenkorjaukseen , muistivuotojen havaitsemiseen ja profilointiin . Nimi valgrind on peräisin norjalaisesta mytologiasta , jossa se on Valhallan pääsisäänkäynnin nimi [4] .

Valgrind luotiin alun perin ilmaisena työkaluna muistinkäytön virheenkorjaukseen x86 Linux -käyttöjärjestelmässä , mutta siitä on kehittynyt yleinen kehys työkalujen rakentamiseen dynaamisen muistin käytön analysointiin, säikeiden turvallisuustestaukseen ja profilointiin. Käytetään monissa Linux-pohjaisissa projekteissa [5] . Versiosta 3.5 lähtien Valgrind toimii myös Mac OS X :ssä.

Valgrindin alkuperäinen kirjoittaja oli Julian Seward , joka voitti toisen Google - O'Reilly Open Source -palkinnon vuonna 2006 työstään Valgrind [6] [7] . Lukuisat muut tekivät myös merkittävän panoksen, mukaan lukien Cherion Armor-Brown, Jeremy Fitzhardin, Tom Hughes, Nicholas Nethercoat, Paul Mackerras, Dirk Muller, Bart Van Assch, Joseph Weidendorfer ja Robert Walsh [8] .

Valgrind on ilmainen ohjelmisto , jolla on GPL -lisenssi .

Yleiskatsaus

Valgrind on pohjimmiltaan virtuaalikone, joka käyttää JIT - kääntämismenetelmiä, joihin kuuluu dynaaminen uudelleenkääntäminen . Toisin sanoen alkuperäistä ohjelmaa ei suoriteta suoraan pääprosessorissa . Sen sijaan Valgrind ensin kääntää ohjelman väliaikaiseen, yksinkertaisempaan muotoon nimeltä Intermediate Representation (IR), joka itse on prosessorista riippumaton ja SSA - muodossa. Kun työkalu (katso alla) on muunnettu, se voi suorittaa minkä tahansa tarvittavan IR-muunnoksen, ennen kuin Valgrind kääntää IR:n takaisin konekoodiksi ja antaa pääprosessorin suorittaa sen. Sitä käytetään, vaikka tähän voidaan käyttää dynaamista käännöstä (eli kun pää- ja kohdeprosessorit kuuluvat eri arkkitehtuureihin). Valgrind kääntää binaarin uudelleen toimimaan saman arkkitehtuurin pää- ja kohdeprosessoreissa (tai sen simulaattorissa).

Näiden muunnosten ansiosta suorituskyky heikkenee merkittävästi: yleensä Valgrindin alla ajettava koodi ja "tyhjä" (ei tee mitään) työkalu toimii 5-10 kertaa hitaammin kuin koodin suorittaminen suoraan; ja joillakin työkaluilla jopa 100 kertaa hitaampi [9] . IR-muoto on kuitenkin paljon instrumentointiystävällisempi kuin alkuperäinen, ja se yksinkertaistaa huomattavasti instrumentoinnin kirjoittamista, ja useimmissa projekteissa suorituskyvyn heikkeneminen virheenkorjauksen aikana ei ole merkittävä ongelma.

Työkalut

Valgrind-paketti sisältää monia työkaluja (jotkin lisätyökalut eivät sisälly). Oletustyökalu (ja eniten käytetty) on Memcheck . Melkein kaikkiin käskyihin Memcheck lisää instrumentointikoodia , joka seuraa laillisuutta (kaikki allokoimaton muisti merkitään alun perin virheelliseksi tai "määrittämättömäksi", kunnes se alustetaan johonkin määritellyistä tiloista, luultavasti toisesta muistista) ja osoitettavuutta (riippumatta siitä, onko muisti on määrätyn osoitteen allokoinnin alainen, eli onko se tyhjä) muistioperaatioista, jotka on tallennettu ns. V-bitteihin ja vastaavasti A-bitteihin . Kun dataa siirretään ja manipuloidaan, instrumentointikoodi pitää kirjaa A- ja V-bittien arvoista, jotta ne ovat aina oikein yksibittisellä tasolla.

Lisäksi Memcheck korvaa standardin C - muistin allokoinnin omalla toteutuksellaan, joka sisältää muun muassa muistisuojat kaikkien allokoitujen lohkojen ympärillä (joissa A-bitit on merkitty "invalidiksi"). Tämän ominaisuuden avulla Memcheck voi havaita puskurin ylivuodot , joissa ohjelma lukee tai kirjoittaa muistia varatun lohkon ulkopuolella (vähän ylivuodolla). (Toinen tapa ratkaista tämä ongelma on toteuttaa rajaosoittimia kääntäjässä, mikä vähentää havaitsemattomien virheiden mahdollisuutta jonkin verran, erityisesti pinovaratussa muistissa mieluummin kuin pinossa varatussa muistissa, mutta se vaatii kaiken instrumentoidun binaarin uudelleenkääntämistä .) Ongelmat, jotka voivat havaitse Memcheck sisältää:

Tämän hinta on suorituskyvyn menetys. Memcheckillä ajettavat ohjelmat toimivat yleensä 5-12 kertaa hitaammin kuin ilman Valgrindia, ja ne käyttävät myös enemmän muistia (johtuen huomattavan ylimääräisen muistin varaamisesta). Siksi koodia ajetaan harvoin jatkuvasti Memcheck / Valgrind alla. Yleisin tilanne on, kun he joko jäljittävät jonkin tietyn virheen tai tarkistavat, ettei koodissa ole tietyntyyppisiä piilovirheitä.

Memcheckin lisäksi Valgrindilla on myös muita työkaluja.

Tuetut alustat

Version 3.4.0 dokumentaation mukaan Valgrind tukee Linuxia x86- , x86-64- ja PowerPC - arkkitehtuureille . Mac OS X :n tuki lisättiin versioon 3.5.0 [11] . Muihin UNIX-tyyppisiin alustoihin (kuten FreeBSD [12] , NetBSD [13] ja QNX [14] ) on epävirallisia portteja .

Memcheckin rajoitukset

Suorituskykyrajoituksen lisäksi Memcheckin merkittävä rajoitus on sen kyvyttömyys havaita rajavirheitä käytettäessä staattista tai pinottua dataa [15] . Seuraava koodi läpäisee Memcheckin ilman varoituksia ilmoitetuista virheistä huolimatta:

int Staattinen [ 5 ]; int func ( tyhjä ) { int Pino [ 5 ]; Staattinen [ 5 ] = 0 ; /* Virhe - vain Static[0] on olemassa ennen Static[4], Static[5] on taulukon ulkopuolella */ Pino [ 5 ] = 0 ; /* Virhe - vain pino[0] on olemassa ennen pinoa[4], pino[5] on matriisin ulkopuolella */ paluu 0 ; }

Tarve havaita tämäntyyppisiä virheitä on erityisen tärkeä tiettyjen pinonkäsittelyvirheiden vuoksi, mikä tekee ohjelmistosta haavoittuvan klassiselle pinon katkaisulle .

Valgrindin kokeellinen SGCheck- apuohjelma pystyy kuitenkin havaitsemaan tällaiset virheet.

Muistiinpanot

  1. http://valgrind.org/info/developers.html
  2. Valgrind: Nykyiset julkaisut . Haettu 16. marraskuuta 2013. Arkistoitu alkuperäisestä 13. marraskuuta 2013.
  3. Valrindin avoimen lähdekoodin projekti Open Hubissa: Kielet-sivu - 2006.
  4. Valgrind UKK . Haettu 10. joulukuuta 2009. Arkistoitu alkuperäisestä 30. maaliskuuta 2021.
  5. Lista käyttäjistä osoitteessa valgrind.org . Haettu 10. joulukuuta 2009. Arkistoitu alkuperäisestä 14. huhtikuuta 2022.
  6. Lista palkinnoista osoitteessa valgrind.org . Haettu 10. joulukuuta 2009. Arkistoitu alkuperäisestä 26. kesäkuuta 2021.
  7. Google-O'Reilly Open Source Awards - Hall of Fame . Haettu 10. joulukuuta 2009. Arkistoitu alkuperäisestä 7. syyskuuta 2008.
  8. Valgrind Developers . Haettu 10. joulukuuta 2009. Arkistoitu alkuperäisestä 25. marraskuuta 2009.
  9. http://valgrind.org/info/about.html Arkistoitu 21. elokuuta 2012 Wayback Machinessa "Käyttämästäsi työkalusta riippuen hidastuskerroin voi vaihdella välillä 5-100."
  10. SGCheck - http://valgrind.org/docs/manual/sg-manual.html Arkistoitu 25. lokakuuta 2014 Wayback Machinessa
  11. Mac OS X -portti . Haettu 10. joulukuuta 2009. Arkistoitu alkuperäisestä 31. toukokuuta 2009.
  12. Valgrind FreeBSD -portti . Haettu 10. joulukuuta 2009. Arkistoitu alkuperäisestä 25. heinäkuuta 2011.
  13. Valgrind NetBSD portti Arkistoitu 9. helmikuuta 2006.
  14. Valgrind QNX -portti . Haettu 6. maaliskuuta 2017. Arkistoitu alkuperäisestä 6. maaliskuuta 2017.
  15. Valgrind UKK . Haettu 10. joulukuuta 2009. Arkistoitu alkuperäisestä 30. maaliskuuta 2021.

Linkit

Muita lähteitä