A Valgrind debug feladatokhoz – elsősorban memória debughoz, memóriaszivárgás-érzékeléshez és teljesítményméréshez (profiling) – használatos programozói eszköz. A Valgrind név maga a skandináv mitológiából ered, ott a Valhalla főbejáratát jelöli.Valgrind FAQ

A Valgrindet eredetileg ingyenes memória debuggernek tervezték x86 alapú Linux rendszerekhez, de egy általános keretrendszerré fejlődött, amivel dinamikus elemzőeszközök készíthetőek, például profilerek. (Számos eszköz része a keretrendszernek, de felépítéséből eredően bővíthető újabb eszközökkel.) A programot számos Linux alapú projekt használja tesztelésre.valgrind.org's list of users

A program eredeti szerzője Julian Seward, aki 2006-ban díjat nyert (Google-O'Reilly Open Source Díj, második hely) a Valgrinden végzett munkájáért.valgrind.org's list of awardsGoogle-O'Reilly Open Source Awards - Hall of Fame Sokan mások is jelentősen hozzájárultak a projekthez, többek közt Cerion Armour-Brown, Jeremy Fitzhardinge, Tom Hughes, Nicholas Nethercote, Paul Mackerras, Dirk Mueller, Josef Weidendorfer és Robert Walsh.A Valgrind fejlesztői

A Valgrind a szabad szoftver GNU General Public License alatt lett terjesztve.

Áttekintés A Valgrind alapvetően egy virtuális gép, ami futásidejű fordítás (JIT) technikát alkalmaz. Az eredeti (vizsgálandó) program kódjából semmi sem fut közvetlenül a hoszt processzoron, ehelyett a Valgrind először átfordítja a programot egy átmeneti, egyszerűbb formára, ezt köztes reprezentációnak (Intermediate Representation) hívják, ami egy processzor-független forma. Az átfordítás után az eszköz (lásd lentebb) szabadon átalakíthatja ezt a köztes kódot, majd végül a Valgrind visszafordítja az átalakított kódot és futtatja a hoszt processzoron. Ez a kódátfordítás lelassítja a program futását, tipikusan négy-ötször lassabban fut egy Valgrinddel elemzett program az eredetihez képest.

Eszközök Több eszköz is be van építve a Valgrind programba és számos külső eszköz is elérhető. Az alapértelmezett és leggyakrabban használt eszköz a Memcheck. A Memcheck extra utasításokat szúr be lényegében minden utasítás köré, amelyekkel követi a memóriakezelés érvényességét. (Használat előtt inicializálva van-e a memóriaterület, és így tovább.)

A Memcheck lecseréli a szabványos C memória lefoglalót a saját implementációjával, amely minden lefoglalt memória körül „memóriaőröket” tartalmaz. Ez képessé teszi arra, hogy érzékelje, ha a program olvas vagy ír kicsivel a lefoglalt memórián kívül.

A Memcheck által felismert hibák: Inicializálatlan memória használata Írás/olvasás korábban már felszabadított memóriaterületről Írás/olvasás a lefoglalt memórián (kicsivel) kívülről Memóriaszivárgás

Az ára mindezeknek a teljesítmény. Egy Memcheckkel futtatott program tipikusan 5-20x lassabban fut, mintha a Valgrind nélkül futna, és több memóriát is használ. Mindezek miatt kevés fejlesztő futtatja a kódját egyfolytában Memcheck alatt, leggyakrabban csak hibakeresés során használják egy-egy adott hiba felderítésére. Ezen felül használják programok érvényesítésére: megnézik, hogy a program nem tartalmaz-e olyan rejtett hibát, amelyet a Memcheck képes érzékelni.

A Memcheck eszközön felül a Valgrind még számos másik eszközt is tartalmaz:

Massif, egy heap profiler. Helgrind, képes érzékelni versenyhelyzeteket többszálú kódban Cachegrind, egy cache profiler és a grafikus felülete a GUI KCacheGrind

Még számos külső fejlesztésű eszköz elérhető a Valgrindhez.

Támogatott platformok A Valgrind 3.3.0 verziója támogatja a Linuxot x86, x86-64 és PowerPC rendszereken. Léteznek nem hivatalos portok más UNIX-szerű rendszerekre (például FreeBSD, NetBSD és Mac OS XValgrind Mac OS X port). Jelenleg nincs port Microsoft Windows rendszerekre és nincs is a rövid távú tervek közt ilyen, de van egy kísérleti verzió, amely képes a Wine programon keresztül Windows programokat debuggolni Linux rendszereken futtatva.

Korlátok A teljesítménycsökkenés mellett komoly korlátja a Valgrindnek, hogy nem képes detektálni a statikusan foglalt adatok esetében a tömbhatár-átlépést. A következő kód hiba nélkül át fog jutni a Memcheck eszközön a Valgrindben, a nyilvánvaló hibák ellenére.

int Static;

int func(void)

int Stack;

Static = 0; /* Hiba - Static-tól Static-ig létezik, de Static már kívül van*/ Stack = 0; /* Hiba - Stack-tól Stack-ig létezik, de Stack már kívül van */

return 0;

A fontosságát az adja ennek a hiba típusnak, hogy ezek a hibák sebezhetővé teszik a programot puffer túlcsordulásos támadással szemben.

Hivatkozások

Külső hivatkozások

Források A Valgrind weboldala Áttekintés a Valgrind rendszerről A Valgrind teljes dokumentációja Valgrind Howto A Valgrindet használó projektek

Kategória:Szabad szoftverek Kategória:Nyílt forrású szoftverek Kategória:Debuggerek