Valgrind - Valgrind

Valgrind
Valgrind logo.png
Původní autořiJulian Seward
VývojářiVývojový tým Valgrind[1]
Stabilní uvolnění3.16.1 (22. června 2020; před 5 měsíci (2020-06-22)) [±][2]
Úložiště Upravte to na Wikidata
Operační systémLinux
Operační Systém Mac
Solaris
Android[3]
TypProfiler, Debugger paměti
LicenceGNU General Public License
webová stránkawww.valgrind.org

Valgrind (/ˈprotilɡrɪnd/) je programovací nástroj pro ladění paměti, únik paměti detekce a profilování.

Valgrind byl původně navržen jako volný, uvolnit ladění paměti nástroj pro Linux na x86, ale od té doby se vyvinul a stal se obecným rámcem pro vytváření nástrojů dynamické analýzy, jako jsou dáma a profilery.

Jméno Valgrind je odkazem na hlavní vchod do Valhalla ze severské mytologie. Během vývoje (před vydáním) byl projekt pojmenován Heimdall; název by však byl v konfliktu s balíčkem zabezpečení.

Přehled

Valgrind je v podstatě a virtuální stroj použitím právě včas (JIT) techniky kompilace, včetně dynamická rekompilace. Nic z původního programu se nikdy nespustí přímo na hostiteli procesor. Místo toho Valgrind nejprve převede program do dočasné, jednodušší formy zvané Intermediate Representation (IR), která je neutrální vůči procesoru, SSA - na základě formy. Po převodu a nářadí (viz níže) může na IR provádět jakékoli transformace, které by chtěl, než Valgrind převede IR zpět do strojového kódu a nechá ho spustit hostitelským procesorem. Valgrind překompiluje binární kód běžet na hostitelských a cílových (nebo simulovaných) CPU stejné architektury. Zahrnuje také a GDB pahýl umožňující ladění cílového programu při jeho spuštění ve Valgrindu pomocí „příkazů monitoru“, které vám umožní dotazovat se na nástroj Valgrind různých druhů informací.

Při těchto transformacích se ztratí značné množství výkonu (a obvykle kód, který nástroj vloží); obvykle běží kód s Valgrindem a nástroj „none“ (který s IR nic nedělá) běží na 20% až 25% rychlosti běžného programu.[4][5]

Nástroje

Memcheck

Valgrind obsahuje několik nástrojů (a několik externích). Výchozí (a nejpoužívanější) nástroj je Memcheck. Vložky Memcheck navíc instrumentace kód kolem téměř všech pokynů, který sleduje platnost (veškerá nepřidělená paměť začíná jako neplatná nebo „nedefinovaná“, dokud není inicializována do deterministického stavu, případně z jiné paměti) a adresovatelnost (zda dotyčná adresa paměti ukazuje na alokovaný, neuvolněný paměťový blok), uložený v tzv V bity a Kousky resp. Jak se data pohybují nebo manipulují, přístrojový kód sleduje bity A a V, takže jsou vždy správné na jednobitové úrovni.

Memcheck navíc nahrazuje standardní C. alokátor paměti s vlastní implementací, která také zahrnuje paměťové stráže kolem všech přidělených bloků (s bity A nastavenými na „neplatné“). Tato funkce umožňuje detekovat Memcheck chyby off-by-one kde program čte nebo zapisuje mimo přidělený blok v malém množství. Mezi problémy, které Memcheck dokáže detekovat a varovat, patří:

Cena za to je ztracený výkon. Programy spuštěné pod Memcheckem běží obvykle 20–30krát pomaleji[6] než běh mimo Valgrind a použít více paměti (za přidělení je penalizace paměti). Proto málo vývojářů spouští svůj kód pod Memcheckem (nebo jakýmkoli jiným nástrojem Valgrind) po celou dobu. Nejčastěji používají tyto nástroje buď ke sledování určité konkrétní chyby, nebo k ověření, že v kódu nejsou žádné skryté chyby (takové, jaké dokáže zjistit Memcheck).

Další nástroje

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

  • Žádný, spouští kód ve virtuálním stroji bez provádění jakékoli analýzy a má tak nejmenší možnou režii CPU a paměti ze všech nástrojů. Protože valgrind sám poskytuje stopu zpět z a Porucha Segmentace, žádný nástroj poskytuje toto zpětné sledování při minimální režii.
  • Zkontrolovat, podobný Memchecku, ale s mnohem menší režií CPU a paměti, čímž se zachytí méně typů chyb. Kontrola verzí byla od verze 3.2.0 odstraněna.[8]
  • Masiv, a halda profiler. Samostatná GUI massif-visualizer vizualizuje výstup z Massif.
  • Helgrind a DRD, detekovat podmínky závodu v vícevláknový kód
  • Cachegrind, a mezipaměti profiler. Samostatné grafické uživatelské rozhraní KCacheGrind vizualizuje výstup z Cachegrind.
  • Callgrind, a callgraph od verze 3.2.0 byl do Valgrind přidán analyzátor vytvořený Josefem Weidendorferem. KCacheGrind může vizualizovat výstup z Callgrind.
  • DHAT, nástroj pro dynamickou analýzu haldy, který analyzuje, kolik paměti je přiděleno a na jak dlouho, stejně jako vzorce využití paměti.
  • exp-sgcheck (pojmenováno exp-ptrcheck před verzí 3.7), experimentální nástroj k vyhledání chyb přetečení zásobníku a globálního pole, které Memcheck nemůže najít.[9] Výsledkem některého kódu jsou falešné poplachy z tohoto nástroje.[10]
  • exp-bbv, simulátor výkonu, který extrapoluje výkon z malé ukázkové sady.

K dispozici je také několik externě vyvinutých nástrojů. Jedním z takových nástrojů je ThreadSanitizer, další detektor podmínky závodu.[11][12]

Podporované platformy

Od verze 3.4.0 podporuje Valgrind Linux na x86, x86-64 a PowerPC. Podpora pro OS X byla přidána ve verzi 3.5.0.[13] Podpora pro Linux na ARMv7 (používá se například v určitých chytré telefony ) byl přidán ve verzi 3.6.0.[14] Podpora pro Solaris byla přidána ve verzi 3.11.0.[3] Existují neoficiální porty pro jiné platformy podobné systému UNIX (například FreeBSD,[15] OpenBSD,[16] a NetBSD[17]). Od verze 3.7.0 PAŽE /Android byla přidána podpora platformy.[3]

Od verze 3.9.0 existuje podpora pro Linux MIPS64 malý a velký endian, pro MIPS DSP ASE na MIPS32, pro s390x Pokyny pro desetinnou plovoucí desetinnou čárku pro SÍLA8 (Napájení ISA 2.07 ) pokyny pro Intel AVX2 pokyny pro rozšíření Intel Transactional Synchronization Extensions, RTM i HLE a počáteční podporu pro hardwarovou transakční paměť na POWER.[2]

Historie a vývoj

Je pojmenován podle hlavního vchodu do Valhalla v Severská mytologie.[18]

Původním autorem Valgrind je Julian Seward, který v roce 2006 vyhrál a Cena Google-O'Reilly Open Source za jeho práci na Valgrindovi.[19][20]

Významně přispělo i několik dalších, například Cerion Armor-Brown, Jeremy Fitzhardinge, Tom Hughes, Nicholas Nethercote, Paul Mackerras, Dirk Mueller, Bart Van Assche, Josef Weidendorfer a Robert Walsh.[21]

Používá jej řada projektů založených na Linuxu.[22]

Omezení Memchecku

Kromě trestu za výkon je důležitým omezením Memchecku jeho neschopnost detekovat všechny případy mezních chyb při použití statických nebo zásobníku přidělených dat.[23] Následující kód předá Memcheck nástroj ve Valgrindu bez incidentů, přestože obsahuje chyby popsané v komentářích:

  int Statický[5];    int func(prázdnota)  {    int Zásobník[5];      Statický[5] = 0;  / * Chyba - statické [0] až statické [4] existují, statické [5] je mimo hranice * /    Zásobník [5] = 0;  / * Chyba - Stack [0] do Stack [4] existuje, Stack [5] je mimo hranice * /        vrátit se 0;  }

Byl vyvinut experimentální nástroj valgrind exp-sgcheck, který řeší toto omezení v Memchecku. Bude detekovat chyby přetečení pole za předpokladu, že první přístup k poli je v mezích pole. Všimněte si, že exp-sgcheck nezjistí překročení pole ve výše uvedeném kódu, protože první přístup k poli je mimo hranice, ale zjistí chybu překročení pole v následujícím kódu.

  prázdnota func(prázdnota)  {    int i, Zásobník[5];    pro (i = 0; i <= 5; i++)        Zásobník [i] = 0;        / * V mezích pro i = 0..4, chyba mimo mez, když i = 5 * /  }

Neschopnost detekovat všechny chyby týkající se přístupu k datům přiděleným zásobníku je obzvláště pozoruhodná od té dobyurčité typy chyb zásobníku vytvořit software zranitelný ke klasicestack rozbíjet exploit.

Viz také

Poznámky

  1. ^ https://valgrind.org/info/developers.html
  2. ^ A b Valgrind News
  3. ^ A b C Poznámky k verzi Valgrind
  4. ^ Domovská stránka společnosti Valgrind
  5. ^ Manuál Valgrind
  6. ^ https://valgrind.org/docs/manual/quick-start.html#quick-start.mcrun
  7. ^ Hlavní seznam nástrojů Valgrind
  8. ^ [1]
  9. ^ sekce exp-sgcheck v uživatelské příručce Valgrind
  10. ^ [2]
  11. ^ https://valgrind.org/downloads/variants.html
  12. ^ K Serebryany, T Iskhodzhanov, ThreadSanitizer - detekce ras v praxi, Sborník workshopů o binární instrumentaci a aplikacích WBIA'09
  13. ^ Port OS X
  14. ^ Port ARM / Linux
  15. ^ Port Valgrind FreeBSD
  16. ^ Port Valgrind OpenBSD
  17. ^ „Valgrind NetBSD port“. Archivovány od originál dne 2006-02-09. Citováno 2006-01-28.
  18. ^ Valgrind FAQ
  19. ^ Seznam ocenění valgrind.org
  20. ^ Ocenění Google-O'Reilly Open Source - síň slávy
  21. ^ Vývojáři společnosti Valgrind
  22. ^ seznam uživatelů valgrind.org
  23. ^ Valgrind FAQ

Reference

externí odkazy