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
Řá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á mytologie|severské mytologii]]) je [[svobodný software|svobodný]] program pod [[GNU General Public License|licencí GPL]] pro [[UN*X]]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 programovací nástroj pro ladění paměti, detekci úniku paměti a profilování. Jméno Valgrind přebírá z pojmenování hlavního vchodu do Valhally (pochází ze severské mytologie).<br />
<br />
Autorem Valgrind je Julian Seward, který v roce 2006 vyhrál druhou cenu Google-O'Reilly Open Source za svou práci na Valgrind. Významně se na ní podíleli také další včetně Cerion Armour-Brown, Jeremy Fitzhardinge, Tom Hughes, Nicholas Nethercote, Paul Mackerras, Dirk Mueller, Bart Van Assche, Josef Weidendorfer a Robert Walsh.<br />
 
<br />
==Přehled==
Valgrind je v podstatě [[virtuální stroj]] s použitím [[just-in-time]] (JIT) kompilační techniky, včetně [[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]]. Následuje bezplatný nástroj (viz níže) pro konverzi .... a umožňuje jej spustit na hostitelském procesoru. PřestožeNPř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é množství výkonu se ztrácí v těchto transformacích. (obvykle, kód nástroj); obvykle kóduKód běžícíhoběžící s ValgrindValgrindem a „žádným“ nástrojem (který nedělá nic pros IR) běží 4 - 5 krát pomaleji než normálně. Nicméně, způsobuložení ve formě IR je mnohem vhodnější pro měření než originál[[strojový kód]], což usnadňuje psaní nástrojů a pro většinu projektů neznamená zpomalení při ladění tohoto postupu žádný velký problém.
 
<br />
Značné množství výkonu se ztrácí v těchto transformacích (obvykle, kód nástroj); obvykle kódu běžícího s Valgrind a „žádným“ nástrojem (který nedělá nic pro IR) běží 4 - 5 krát pomaleji než normálně. Nicméně, způsob IR je mnohem vhodnější pro měření než originál, což usnadňuje psaní nástrojů a pro většinu projektů neznamená zpomalení při ladění tohoto postupu žádný velký problém.
<br />
==Nástroje==
Existuje více nástrojů obsažených vve Valgrind (a několik externích)Valgrindu. Výchozí (a nejčastěji používaný) je nástroj Memcheck. Memcheck vloží extranavíc přístrojovézvláštní kódy okolo téměř všech pokynůpříkazů, které udržují informaci ao 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 adresovatelnostadresovatelnosti (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ý kód udržuje A- a V-bity, tak žetakže jsou správně na úrovni jednoho bitu.
 
 
Kromě toho, [[Memcheck]] nahradí standardní C alokovanoualokátor paměťpaměti jehosvou 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 MemcheckMemchecku detekci [[off-by-one errors]] chyb v případě, že program zapisuje mimo přidělené množství bloku. (Jiné přístupy k tomuto problému zahrnuje provádění vymezeného ukazatele v kompilátoru, které poskytují nižší šance nezjištěných chyb, zejména pokud jde o paměť, která je přidělena do fronty a ne hromadu, ale vyžaduje rekompilaci všech nástrojů binárního kódu.) Mezi problémy, které dokáže Memcheck detekovat a varovat před nimi patří následující:
<br />
* PoužidíPoužití neinicializované paměti
Kromě toho, [[Memcheck]] nahradí standardní C alokovanou paměť jeho 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 Memcheck detekci [[off-by-one errors]]v případě, že program zapisuje mimo přidělené množství bloku. (Jiné přístupy k tomuto problému zahrnuje provádění vymezeného ukazatele v kompilátoru, které poskytují nižší šance nezjištěných chyb, zejména pokud jde o paměť, která je přidělena do fronty a ne hromadu, ale vyžaduje rekompilaci všech nástrojů binárního kódu.) Mezi problémy, které dokáže Memcheck detekovat a varovat před nimi patří následující:
* Čtení / zápis paměti poté, co byla uvolněna
* Použidí neinicializované paměti
* Čtení / zápis paměti poté co byla uvolněna
* Čtení / zápis z konce [[malloc]] bloků
* [[Úniky paměti]]
 
Cenou za to 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.
<br />
 
Cenou za to je ztráta výkonu. Programy běžící pod Memcheck obvykle běží pětkrát a dvacetkrát pomaleji než mimo Valgrind a používají mnohem více paměti (to je značná nevýhoda za přidělení paměti). A tak někteří vývojáři spouští kód pod Memcheck (nebo jakýmkoli jiný nástroj Valdrind) po celou dobu. Ve většině případů by byly buď dohledány některé chyby nebo k ověření nejsou k dispozici žádné skryté chyby (chyby tohoto druhu může Memcheck objevit) v kódu.
Kromě MemcheckMemchecku má Valgrind několik dalšídalších nástrojů:
* Addrcheck, vzdálený bratranec od MemcheckMemchecku, 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, [[heapprofiler]] [[profilerhalda|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 budůtypů chyb
 
<br />
Kromě Memcheck má Valgrind několik další nástrojů:
* Addrcheck, vzdálený bratranec od Memcheck, 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, [[heap]] [[profiler]]
* Helgrind a DRD, nástroje schopné zjistit zálohu podmínek ve vícevláknových kódech
* Cachegrind, casch profiler a jeho GUI 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 budů
<br />
== 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]].
 
==Omezení MemcheckMemchecku==
<br />
Kromě významného výkonového omezení není Memcheck schopen zjistit meze chyb v použití statických a haldově alokovaných dat. Následující kód projde nástrojem Memcheck vve ValgrindValgrindu bez incidentů, i přes uvedené chyby:
==Omezení Memcheck==
Kromě významného výkonového omezení není Memcheck schopen zjistit meze chyb v použití statických a haldově alokovaných dat. Následující kód projde nástrojem Memcheck v Valgrind bez incidentů, i přes uvedené chyby:
 
<br />
<source lang="c">
int Static[5];
Řádek 54 ⟶ 46:
</source>
 
<br />
Zvláště za povšimnutí stojí neschopnost zjistit tento typ chyby, protože určitá zásoba chyb, činí software citlivým ve věci klasického zneužití (nabourání se do programu).
Nicméně, Valgrind experimentální nastroj Ptecheck, kterým lze takovéto chyby detekovat, stejně tak lze použít mnoho dalších nástrojů ke statické analýze kódu.
 
<br />
== Externí odkazy ==
* {{en}} [http://valgrind.org/ Valgrind homeDomovská pagestránka]
* [http://www.valgrindroot.orgcz/infoserialy/valgrind/about.html Overview of theSeriál Valgrind] systemna [[root.cz]]
 
*[http://www.valgrind.org/docs Complete manual of Valgrind]
[[Kategorie:Debuggery]]
*[http://valgrind.org/gallery/users.html Projects using Valgrind]
 
[[da:Valgrind]]
{{Překlad
[[de:Valgrind]]
| jazyk = en
| článek = [[en:Valgrind]]
[[es:Valgrind]]
| revize =
[[fr:Valgrind]]
}}
[[hu:Valgrind]]
[[it:Valgrind]]
[[ja:Valgrind]]
[[pl:Valgrind]]
[[pt:Valgrind]]
[[ru:Valgrind]]
[[zh:Valgrind]]