Valgrind

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2020. december 29-én felülvizsgált verziótól ; az ellenőrzések 8 szerkesztést igényelnek .
Valgrind
Típusú Profiler , memóriahasználat hibakereső
Szerző Seward, Julian [1]
Fejlesztő Valgrind fejlesztők
Beírva C [3]
Operációs rendszer Linux , Mac OS X , Android [2]
legújabb verzió 3.19.0 ( 2022. április 11. )
Engedély GNU általános nyilvános licenc
Weboldal valgrind.org

A Valgrind  egy eszköz a memóriahasználat hibakeresésére , a memóriaszivárgások észlelésére és a profilalkotásra . A valgrind név a skandináv mitológiából származik , ahol Valhalla főbejáratának neve [4] .

A Valgrind eredetileg ingyenes eszközként jött létre az x86 Linux operációs rendszer memóriahasználatának hibakeresésére , de általános keretrendszerré fejlődött a dinamikus memóriahasználat elemzéséhez, a szálbiztonsági teszteléshez és a profilalkotáshoz. Számos Linux alapú projektben használják [5] . A 3.5-ös verzió óta a Valgrind Mac OS X alatt is működik.

A Valgrind eredeti szerzője Julian Seward volt , aki 2006-ban elnyerte a Google második O'Reilly Open Source Award -díját a Valgrind című munkájáért [6] [7] . Sokan mások is jelentős mértékben hozzájárultak, köztük Cherion Armor-Brown, Jeremy Fitzhardin, Tom Hughes, Nicholas Nethercoat, Paul Mackerras, Dirk Muller, Bart Van Assch, Joseph Weidendorfer és Robert Walsh [8] .

A Valgrind egy ingyenes szoftver , amelynek licence a GPL .

Áttekintés

A Valgrind lényegében egy virtuális gép , amely JIT fordítási módszereket használ , köztük a dinamikus újrafordítást . Vagyis az eredeti program nem közvetlenül a főprocesszoron fut le . Ehelyett a Valgrind először lefordítja a programot egy ideiglenes, egyszerűbb formára, amelyet Intermediate Representation-nak (IR) neveznek, amely maga is processzorfüggetlen és SSA formában van. A konvertálás után az eszköz (lásd alább) bármilyen szükséges infravörös konverziót végrehajthat, mielőtt a Valgrind visszafordítja az IR-t gépi kódra , és lehetővé teszi a fő processzor számára, hogy végrehajtsa. Akkor is használatos, ha ehhez dinamikus fordítás is használható (vagyis amikor a fő- és a célprocesszor különböző architektúrákhoz tartozik). A Valgrind újrafordítja a bináris fájlt , hogy az azonos architektúrájú fő és cél (vagy szimulátor) processzorokon fusson.

Ezen átalakítások miatt a teljesítmény jelentősen csökken: általában a Valgrind alatt futó kód és egy „üres” (semmit csináló) eszköz 5-10-szer lassabban fut, mint a kód közvetlen végrehajtása; egyes eszközökkel pedig akár 100-szor lassabb [9] . Az IR-forma azonban sokkal műszerbarátabb , mint az eredeti, és nagyban leegyszerűsíti az írásműszerezést, és a legtöbb projektnél nem jelent jelentős problémát a teljesítményromlás a hibakeresés során.

Eszközök

A Valgrind csomag számos eszközt tartalmaz (néhány kiegészítő eszközt nem tartalmaz). Az alapértelmezett (és leggyakrabban használt) eszköz a Memcheck . Szinte az összes utasítás köré a Memcheck további műszerkódot szúr be , amely nyomon követi a legalitást (az összes le nem osztott memória kezdetben érvénytelennek vagy "határozatlannak" van jelölve, amíg inicializálódik a meghatározott állapotok egyikébe, valószínűleg egy másik memóriából) és a címezhetőséget (függetlenül attól, hogy a memória a memóriaműveletek meghatározott címkiosztásának hatálya alá tartozik, vagyis üres-e), amely az úgynevezett V-bitekben , illetve A-bitekben kerül tárolásra . Az adatok mozgatásakor és manipulálásakor a műszerkód nyomon követi az A- és V-bitek értékeit, hogy azok egybites szinten mindig helyesek legyenek.

Sőt, a Memcheck a szabványos C memóriafoglalást saját megvalósítására cseréli, amely többek között memóriavédőket tartalmaz az összes lefoglalt blokk körül (amelyek A bitjei "érvénytelennek" vannak jelölve). Ez a funkció lehetővé teszi a Memcheck számára, hogy észlelje a puffertúlcsordulásokat , amelyekben a program a lefoglalt blokkon kívül olvas vagy ír memóriát (kis túlcsordulás mellett). (A probléma megoldásának másik módja a határmutatók implementálása a fordítóba, ami némileg csökkenti az észleletlen hibák esélyét, különösen a verem által lefoglalt memóriában, nem pedig a kupac lefoglalt memóriában, de ehhez az összes műszeres bináris újrafordítása szükséges.) Memcheck észlelése a következőket tartalmazza:

Ennek ára a teljesítményvesztés. A Memcheck alatt futó programok általában 5-12-szer lassabban futnak, mint a Valgrind nélkül, és több memóriát is használnak (a jelentős többletmemória lefoglalása miatt). Ezért a kód ritkán fut folyamatosan a Memcheck / Valgrind alatt. A leggyakoribb helyzet az, amikor vagy valamilyen konkrét hibát találnak ki, vagy ellenőrzik, hogy nincsenek-e bizonyos típusú rejtett hibák a kódban.

A Memcheck mellett a Valgrind más eszközökkel is rendelkezik.

Támogatott platformok

A 3.4.0-s verzió dokumentációja szerint a Valgrind támogatja a Linuxot x86 , x86-64 és PowerPC architektúrákhoz . A Mac OS X támogatása a 3.5.0-s verzióban jelent meg [11] . Vannak nem hivatalos portok más UNIX-szerű platformokhoz (például FreeBSD [12] , NetBSD [13] és QNX [14] ).

A Memcheck korlátai

A teljesítménykorlátozás mellett a Memcheck jelentős korlátja, hogy nem képes észlelni a határhibákat statikus vagy halmozott adatok használatakor [15] . A következő kód sikeresen átmegy a Memchecken , minden figyelmeztetés nélkül, függetlenül a jelzett hibáktól:

int Statikus [ 5 ]; int funkció ( érvénytelen ) { int Stack [ 5 ]; Statikus [ 5 ] = 0 ; /* Hiba – csak a Static[0] létezik a Static[4] előtt, a Static[5] a tömbön kívül van */ Verem [ 5 ] = 0 ; /* Hiba - csak a Stack[0] létezik a Verem[4] előtt, a Verem[5] a tömbön kívül van */ return 0 ; }

Az ilyen típusú hibák észlelésének szükségessége különösen fontos bizonyos verem-manipulációs hibák miatt, amelyek sebezhetővé teszik a szoftvert a klasszikus veremletöréssel szemben .

A Valgrind kísérleti SGCheck segédprogramja azonban eléggé képes az ilyen hibák észlelésére.

Jegyzetek

  1. http://valgrind.org/info/developers.html
  2. Valgrind: Jelenlegi kiadások . Letöltve: 2013. november 16. Az eredetiből archiválva : 2013. november 13..
  3. A valgrind nyílt forráskódú projekt az Open Hubon: Nyelvek oldal – 2006.
  4. Valgrind GYIK . Letöltve: 2009. december 10. Az eredetiből archiválva : 2021. március 30.
  5. A valgrind.org felhasználóinak listája . Letöltve: 2009. december 10. Az eredetiből archiválva : 2022. április 14..
  6. A díjak listája a valgrind.org oldalon . Letöltve: 2009. december 10. Az eredetiből archiválva : 2021. június 26.
  7. Google-O'Reilly Open Source Awards – Hírességek Csarnoka . Letöltve: 2009. december 10. Az eredetiből archiválva : 2008. szeptember 7..
  8. Valgrind Developers . Letöltve: 2009. december 10. Az eredetiből archiválva : 2009. november 25..
  9. http://valgrind.org/info/about.html Archiválva : 2012. augusztus 21. a Wayback Machine -nél "A használt eszköztől függően a lassítási tényező 5-100 között lehet."
  10. SGCheck – http://valgrind.org/docs/manual/sg-manual.html Archiválva : 2014. október 25. a Wayback Machine -nél
  11. Mac OS X port . Letöltve: 2009. december 10. Az eredetiből archiválva : 2009. május 31..
  12. Valgrind FreeBSD port . Letöltve: 2009. december 10. Az eredetiből archiválva : 2011. július 25.
  13. Valgrind NetBSD port Archiválva : 2006. február 9.
  14. Valgrind QNX port . Letöltve: 2017. március 6. Az eredetiből archiválva : 2017. március 6..
  15. Valgrind GYIK . Letöltve: 2009. december 10. Az eredetiből archiválva : 2021. március 30.

Linkek

További források