Valgrind
| Valgrind | |
| Fejlesztő | The Valgrind Developers |
| Legfrissebb stabil kiadás | 3.8.1 (2012. szeptember 18.) +/- |
| Legfrissebb fejlesztői kiadás | ismeretlen +/- |
| Operációs rendszer | GNU/Linux/Mac OS X/Android[1] |
| Kategória | Profiler, memoria debugger |
| Licenc | GNU General Public License |
| A Valgrind weboldala | |
A Valgrind egy programozói eszköz debug feladatokhoz, elsősorban memória debug, memóriaszivárgás-detektáláshoz és teljesítményméréshez (profiling). A Valgrind név maga a skandináv mitológiából ered, ott a Valhalla főbejáratát jelöli.[2]
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.[3]
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.[4][5] 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.[6]
A Valgrind a szabad szoftver GNU General Public License alatt lett terjesztve.
Tartalomjegyzék |
Áttekintés [szerkeszté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. A konverzió után az eszköz (lásd lentebb) szabadon transzformálhatja ezt a köztes kódot, majd végül a Valgrind visszafordítja a transzformált 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 [szerkesztés]
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öre, amelyekkel követi a memóriakezelés validságát. (Használat előtt inicializálva van-e a memóriaterület, és így tovább.)
A Memcheck lecseréli a stanard C memória allokátort a saját implementációjával, ami tartalmaz memoria őröket minden allokált memória körül. Ez képessé teszi arra, hogy detektálja ha a program olvas vagy ír kicsivel az allokált 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 az allokált memórián (kicsivel) kívülről
- Memóriaszivárgás
Az ára mindezeknek a teljesítmény. Egy Memcheck-kel 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 specifikus hiba felderítésére. Ezen felül használják programok validálására, miszerint a program nem tartalmaz olyan rejtett hibát, amit 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 detektálni 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 [szerkesztés]
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[7], NetBSD[8] és Mac OS X[9]). 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 [szerkesztés]
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[5]; int func(void) { int Stack[5]; Static[5] = 0; /* Hiba - Static[0]-tól Static[4]-ig létezik, de Static[5] már kívül van*/ Stack [5] = 0; /* Hiba - Stack[0]-tól Stack[4]-ig létezik, de Stack[5] 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 [szerkesztés]
Külső hivatkozások [szerkesztés]
- Nicholas Nethercote and Julian Seward: Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation. Proceedings of ACM SIGPLAN 2007 Conference on Programming Language Design and Implementation (PLDI 2007). ACM
- Julian Seward and Nicholas Nethercote: Using Valgrind to detect undefined value errors with bit-precision. Proceedings of the USENIX Annual Technical Conference 2005. USENIX Association
- J. Seward, N. Nethercote, J. Weidendorfer and the Valgrind Development Team. Valgrind 3.3 — Advanced Debugging and Profiling for GNU/Linux applications. Network Theory Ltd, 164 pages. o (2008. március 1.). ISBN 0954612051

