Valgrind

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Valgrind (výslovnost ) je v informatice program pro unixové systémy, který pomáhá při ladění a profilování programů. Lze ho použít například při hledání úniků paměti, hledání souběhů, nebo také při snaze monitorovat a zlepšit využití cache. Valgrind je open source software šířený pod licencí GPL. Název je odvozen od jména hlavního vchodu do Valhally v severské mytologii.

Přehled

Valgrind je v podstatě virtuální stroj používající JIT (Just-In-Time) techniky, včetně dynamické rekompilace. Při použití Valgrindu se původní program nespouští přímo na procesoru počítače, ale je Valgrindem přeložen do dočasné, jednodušší formy tzv. +more Intermediate reprezentace (IR), která je procesorově neutrální, na základě formy SSA. Valgrind překompiluje binární kód běžící na hostitelském a cílovém (nebo simulovaném) procesoru stejné architektury.

V těchto transformacích se ztrácí značné množství výkonu. Kód běžící s Valgrindem běží 4-5krát pomaleji proti normálnímu spuštění. +more Uložení ve formě IR (místo strojového kódu) je však vhodnější pro měření. Usnadňuje psaní nástrojů a pro většinu projektů neznamená zpomalení při ladění velký problém.

Nástroje

Existuje více nástrojů obsažených ve Valgrindu. Výchozí (a nejčastěji používaný) je nástroj Memcheck. +more Memcheck vloží navíc zvláštní kódy okolo téměř všech příkazů, které udržují informaci o platnosti (veškerá nevyužitá paměť začíná jako neplatná nebo nedefinovaná, dokud není inicializována do deterministického stavu, případně z jiných pamětí) a adresovatelnosti (zda adresy bodů v paměti jsou přiděleny, neuvolněnému paměťovému bloku), uložené do takzvaných V-bitů a A-bitů. Manipuluje se s nimi jako s daty a strojový kód udržuje A- a V-bity, takže jsou správně na úrovni jednoho bitu.

Kromě toho Memcheck nahradí standardní alokátor paměti jazyka C svou vlastní implementací, která zahrnuje také hlídání paměti kolem přidělených bloků (s A bity nastavenými na neplatné). Ta funkce umožňuje Memchecku detekci off-by-one chyb v případě, že program zapisuje mimo přidělené množství bloku. +more Mezi problémy, které dokáže Memcheck detekovat a varovat před nimi patří následující:.

* použití neinicializované paměti * čtení nebo zápis paměti poté, co byla uvolněna * čtení nebo zápis z konce malloc bloků * únik paměti

Cenou za výše uvedené možnosti je ztráta výkonu. Programy běžící pod Memcheckem obvykle běží pětkrát až dvacetkrát pomaleji než mimo Valgrind a používají mnohem více paměti.

Kromě Memchecku má Valgrind několik dalších nástrojů:

* Addrcheck - vzdálený bratranec od Memchecku, běží mnohem rychleji a nevyžaduje tolik paměti, ale zachytává méně chyb. Tento nástroj byl odstraněn od verze 3. +more2. * Massif - profiler haldy * Helgrind a DRD - nástroje pro ladění souběhů * Cachegrind - profiler využití cache paměti (existuje grafické rozhraní KCachegrind) * exp-ptrcheck - experimentální nástroj pro hledání podobných chyb jako Memcheck, ale s odlišným přístupem, která je schopen zjistit i několik dalších typů chyb.

Podporované platformy

Program pracuje v Linuxu na platformách x86, x86-64 a PowerPC. Ve verzi 3. +more5. 0 je plánována podpora Mac OS X. Neoficiální verze byly zprovozněny i pod FreeBSD a NetBSD.

Omezení Memchecku

Kromě významného výkonového omezení není Memcheck schopen zjistit chyby mezí při použití dat alokovaných staticky nebo na zásobníku . Následující kód projde nástrojem Memcheck ve Valgrindu bez incidentů, i přes uvedené chyby:

int Static[5];

int func(void) { int Stack[5];

Static[5] = 0; /* chyba - existuje Static[0] až Static[4], avšak Static[5] je mimo možné meze */ Stack [5] = 0; /* chyba - existuje Stack[0] až Stack[4], avšak Stack[5] je mimo možné meze */

return 0; }

Reference

Externí odkazy

http://valgrind.org - domácí stránka projektu * http://www.root.cz/serialy/valgrind/ - seriál Valgrind na root.cz

Kategorie:Debuggery

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top