Valgrind: Porovnání verzí

Smazaný obsah Přidaný obsah
částečný revert, částečné upravení, odstranění některých zcela nesmyslných pasáží, chtělo by to ještě zkouknout - vypadá to na strojový překlad
Formulace
Řádek 1:
'''Valgrind''' (výslovnost {{IPA2|ˈvælɡrɪnd}}, název) je odvozen od jména hlavního vchodu do [[Valhalla|Valhally]] v [[SeverskáInformatika mytologie|severské(počítačová mytologii]]věda) je [[svobodný software|svobodnýinformatice]] program pod [[GNU General Public License|licencí GPL]] pro [[UN*X|unixové]]ové systémy, který pomáhá při [[ladění programů|ladění]] a [[profilování]] programů. Lze ho použít například při hledání [[únik paměti|úniků paměti]] a, hledání [[souběh]]ů, nebo také při snaze monitorovat a zlepšit využití [[cache]]. Valgrind je [[open source software]] šířený pod [[GNU General Public License|licencí GPL]]. Název je odvozen od jména hlavního vchodu do [[Valhalla|Valhally]] v [[Severská mytologie|severské mytologii]].
 
== Přehled ==
Valgrind je v podstatě [[virtuální stroj]] s použitímpoužívající [[just-in-timeJIT]] (JITJust-In-Time]]) kompilační techniky, včetně [[Dynamická rekompilace|dynamické rekompilace]]. Nic z původního programu nelze spustit přímo na procesoru počítače. Místo toho Valgrind nejprve přeloží program do dočasné, jednodušší formy tzv. Intermediate reprezentace (IR), která je procesorově neutrální, na základě formy [[SSA]]. NPřestožePřestože by mohlo být použito dynamického překladu (to znamená,{{Fakt/dne|20100405222254}}, že hostitelský a cílový procesor jsou z různých architektur), není tomu tak. Valgrind překompiluje binární kód běžící na hostitelském a cílovém (nebo simulovaném) procesoru stejné architektury.
 
ZnačnéV množstvítěchto výkonutransformacích se ztrácí vznačné těchtomnožství transformacíchvýkonu. Kód běžící s Valgrindem a „žádným“ nástrojem (který nedělá nic s IR) běží 4 - 5 krát pomaleji, než normálně. Nicméně, uloženíUložení ve formě IR (místo [[strojový kód|strojového kódu]]) je mnohemvšak vhodnější pro měření než [[strojový kód]], což 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. 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, neosvobozenému paměťovému bloku), uložené do takzvaných V-bitů a A-bitů. Manipuluje se s nimi jako s daty a přístrojovýstrojový kód udržuje A- a V-bity, takže jsou správně na úrovni jednoho bitu.
 
Kromě toho [[Memcheck]] nahradí standardní C alokátor paměti [[Programovací jazyk C|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. Mezi problémy, které dokáže Memcheck detekovat a varovat před nimi patří následující:
 
* Použitípoužití neinicializované paměti
Kromě toho [[Memcheck]] nahradí standardní C alokátor paměti 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. Mezi problémy, které dokáže Memcheck detekovat a varovat před nimi patří následující:
* čtení nebo zápis paměti poté, co byla uvolněna
* Použití neinicializované paměti
* Čteníčtení /nebo zápis pamětiz poté,konce co[[malloc]] byla uvolněnabloků
* [[Únikyúnik paměti]]
* Čtení / zápis z konce [[malloc]] bloků
* [[Úniky paměti]]
 
Cenou za tovýše jeuvedené 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.2.0.
* Massif, [[profiler]] [[halda (paměť)|haldy]]
* Helgrind a DRD, nástroje pro ladění [[souběh]]ů
* Cachegrind, profiler využití [[cache]] paměti (existuje [[grafické uživatelské rozhraní|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 [[Linux]]u na platformách [[x86]], [[x86-64]] a [[PowerPC]]. Ve verzi 3.5.0 je plánována podpora [[Mac OS X]]. Neoficiální verze byly zprovozněny i pod [[FreeBSD]] a [[NetBSD]].
[[NetBSD]].
 
== Omezení Memchecku ==
Kromě významného výkonového omezení není Memcheck schopen zjistit mezechyby chybmezí vpři použití statickýchdat aalokovaných haldověstaticky alokovanýchnebo datna [[halda (paměť)|haldě]]. Následující kód projde nástrojem Memcheck ve Valgrindu bez incidentů, i přes uvedené chyby:
 
<source lang="c">
int Static[5];
int func(void)
{
int Stack[5];
Static[5] = 0; /* Error - Static[0] to Static[4] exist, Static[5] is out of bounds */
Stack [5] = 0; /* Error - Stack[0] to Stack[4] exist, Stack[5] is out of bounds */
return 0;
}
</source>
 
int func(void)
{
int Stack[5];
 
Static[5] = 0; /* Errorchyba - existuje Static[0] to Static[4] exist, avšak Static[5] isje outmimo ofmožné boundsmeze */
Stack [5] = 0; /* Errorchyba - existuje Stack[0] to Stack[4] exist, avšak Stack[5] isje outmimo ofmožné boundsmeze */
 
return 0;
}
</source>
 
== Externí odkazy ==
* {{en}} [http://valgrind.org/ Domovská– domácí stránka] projektu
* [http://www.root.cz/serialy/valgrind/ Seriál– seriál Valgrind] na [[root.cz]]
 
[[Kategorie:Debuggery]]