Jak používat Pageheap.exe v systému Windows XP, Windows 2000 a Windows Server 2003

Souhrn

Tento článek popisuje použití nástroje stránky haldy (Pageheap.exe) v systému Microsoft Windows XP, Microsoft Windows 2000 a Microsoft Windows Server 2003.

Další informace

Pageheap.exe nastaví Příznaky haldy stránky, které pomohou najít související haldy poškození. Může také pomoci rozpoznat nevracení v programech, které jsou spuštěny v systému Windows XP Professional a Windows 2000 Professional Service Pack 2 (SP2).

Pageheap.exe zavádí ověření vrstvu softwaru (stránka správce hald) mezi aplikací a systému, který ověří všechny operace dynamické paměti (rozdělení, se uvolní a dalších operací haldy). Při zapnuté funkci správce hald stránky, aplikace, která je právě testován potom spuštěna ladicí program. Pokud dojde k potížím, způsobí přerušení ladicího programu.

Důležité: Pageheap.exe neurčuje, co je chyby, ale bude stav systému, pokud dojde k potížím. Umožňuje ověření vrstvu, která již existuje v knihovnách Ntdll.dll systému v systému Windows 2000 Professional s aktualizací SP2 a Windows XP Professional. Pageheap.exe nebude fungovat v předchozích verzích systému Windows.

Pokud je zjištěna chyba, testovány aplikace není spuštěna pod ladicí program bude právě crash bez zpětné vazby.

Koncepty

Běžné potíže při vývoji aplikací je poškození haldy. K tomu obvykle dochází, pokud aplikace přiděluje blok paměti haldy určenou velikost a poté zapíše do adresy paměti nad požadovanou velikost bloku haldy. Poškození haldy může dojít při aplikace zapisuje do bloku paměti, který již byl uvolněn.

Dva pojmy jsou důležité ke správnému pochopení příkazy týkající se Pageheap.exe a způsob jeho použití:
  • Poškození v blocích haldy jsou zjištěny umístěním buď-přístupné stránky na konci přidělení nebo kontrolou vzorky výplně při uvolněno bloku.
  • Pro každý haldy vytvořen v rámci procesu, který má povoleno haldy stránky jsou dvě haldách (přes celou stránku haldy a normální stránku haldy).
    • Přes celou stránku haldy odhalí umístěním stránky nejsou přístupné na konci přidělení v blocích haldy poškození. Výhodou tohoto přístupu je dosáhnout "sudden smrti," což znamená, že proces bude přístup porušení (AV) přesně v okamžiku selhání. Toto chování usnadňuje ladění selhání. Nevýhodou je, že každý přidělení používá alespoň jednu stránku paměti přidělené. Pro proces náročné na paměť můžete systém prostředky rychle vyčerpány.
    • Normální stránku haldy lze použít v situacích, kdy omezení paměti činí přes celou stránku haldy nepoužitelný. Vzorky výplně zkontroluje při uvolněno bloku haldy. Výhodou této metody je, že výrazně snižuje spotřebu paměti. Nevýhodou je, že poškození bude pouze rozpoznán při uvolněno bloku. Díky selhání obtížnější ladění.

Stáhnout umístění pro nástroj Pageheap

Chcete-li stáhnout nejnovější balíček nástroje ladění, klepněte na následující odkaz:

Vyberte nejnovější verzi ladicích nástrojů. Při instalaci nástroje vyberte
Vlastní instalace a nainstalujte do adresáře s odpovídající název. Například nainstalujte nástroje C:\Debug nebo C:\Debugtools.

Volba metody prozkoumat poškození bloku haldy

Většina poškození v blocích haldy lze zjištěné v jednom ze dvou způsobů:
  • Přes celou stránku haldy:-přístupné stránky umístěte na konci přidělení.
  • Normální stránku haldy: vzorky výplně kontrola při získá uvolněno bloku.

Přes celou stránku haldy

Přes celou stránku haldy lze povolit pro jednotlivé procesy nebo v rámci omezené parametry pro velké procesy z důvodu jeho vysoké paměti požadavků. Nemohl být povolen celý systém, protože je obtížné zhodnotit velikost souboru požadované stránky. Pomocí stránkovacího souboru, který je příliš malý s přes celou stránku haldy celý systém vykreslí systému nelze spustit.

Výhody přes celou stránku haldy je způsobí procesu přístup k porušení (AV) přesně v okamžiku selhání. To usnadňuje selhání ladění. Aby bylo možné zjistit chyby, nejprve použít normální stránku haldy určit oblasti, kde je selhání procesu a potom použijte přes celou stránku haldy na jednotlivé procesy rozsáhlých omezeným třídy přidělení (, rozsah určitou velikost, nebo konkrétní knihovny).

Normální stránku haldy

Normální stránku haldy lze použít pro testování rozsáhlých procesů bez spotřeba vysoké paměti, že přes celou stránku haldy vyžaduje. Normální stránku haldy však pozdrží zjišťování dokud bloky jsou uvolněny, a tím obtížnější ladění selhání.

Normální stránku haldy lze obecně používejte pro počáteční rozsáhlých procesy testování. Pokud jsou zjištěny problémy, poté povolte přes celou stránku haldy omezeným třídy přidělení v těchto procesech.

Normální stránku haldy lze bezpečně povoleno pro všechny procesy celého systému. To je velmi užitečné na těžební etáže test, které provádějí ověření obecného systému, spíše než testování komponenty zaměřený. Normální stránku haldy lze povolit také pro jeden proces.

Pomocí systémového haldy stránky GFlags

Chcete-li povolit haldy stránky celého systému se používá nástroje GFlags . V pořadí pro příkaz GFlags se projeví po restartování počítače po vydání příkazu.

Chcete-li povolit haldy celý systém normální stránku:
  1. Na příkazovém řádku zadejte následující příkaz:gflags r + hpa

  2. Restartujte počítač.
Chcete-li zakázat haldy celý systém normální stránku:
  1. Na příkazovém řádku zadejte následující příkaz:gflags - r-hpa

  2. Restartujte počítač.
Poznámka: Žádné GFlags nastavení jsou užitečné povolit haldy stránky. Pokud jsou povoleny další nastavení, které by mohly souviset s haldy, mohou chyby stránky haldy zavedena kvůli konfliktům mezi správce hald stránky a tyto příznaky haldy "neškodné".

Pomocí jednoho procesu stránky haldu GFlags

Můžete povolit haldy stránky sledovat jeden konkrétní proces. Chcete-li to provést, postupujte takto:
  1. Na příkazovém řádku změňte adresář, kam jste nainstalovali ladicí nástroje.
  2. Na příkazovém řádku zadejte následující příkaz a stiskněte klávesu ENTER:
    Gflags.exe /p /enable
    lsass.exe
    Poznámka: Lsass.exe je zkratka pro název procesu, který chcete monitorovat pomocí nástroje Pageheap.
  3. Při sledování haldy stránky již nepotřebujete, zakažte sledování. Chcete-li to provést, zadejte na příkazovém řádku následující příkaz a stiskněte klávesu ENTER:
    Gflags.exe /p /disable lsass.exe
    Poznámka: Lsass.exe je zkratka pro název procesu, který chcete monitorovat pomocí nástroje Pageheap.
  4. Seznam všechny programy, které mají aktuálně ověření Pageheap povolena, zadejte na příkazovém řádku následující příkaz a stiskněte klávesu ENTER:
    Gflags.exe /p

Nezarovnané přidělení

Vedoucí haldy systému Windows (všechny verze) mají vždy zaručit, že přidělení haldy mít počáteční adresy, která je zarovnán 8 bajtů (na 64bitových platformách zarovnání je 16 bajtů). Správce hald stránky díky stejné záruky. To je nemožné, ale pokud chcete mít na konci z the přidělení přesně na konci stránky. Přesné rozdělení konec stránky je nutné, aby chybu vypnout o jednobajtových bude aktivovat čtení nebo zápisu do stránky nejsou přístupné a způsobit okamžité poruchy.

Pokud uživatel požadoval velikost bloku 8bajt zarovnány, haldy stránky nemůže splnit "Spustit adresu 8bajt zarovnány" a "end adresu stránky zarovnány" omezení. Řešení je splnění první omezení a zahájení zarovnané 8bajtové bloku. Potom použijte vzorek výplně malé mezi konci bloku a začátek stránky nejsou přístupné. Tento vzorek výplně může být z bajtů 0 až 7 bajtů v délce na 32bitové architektury. Vzorek výplně je kontrolována při zdarma.

Pokud je okamžité poruchy detekce potřebné pro rozdělení těchto prostředků, které jinak bude vzorek výplně na konci, aby správce hald stránky ignorovat pravidlo 8bajtových zarovnání a vždy na konec přidělení hranice stránky zarovnání pomocí parametrů / nezarovnaný a/full . Další informace naleznete v tématu parametr / nezarovnaný .

Poznámka: Některé programy vytvářejí předpoklady týkající se zarovnání 8 byte a mohou přestat fungovat správně s parametr / nezarovnaný . Aplikace Microsoft Internet Explorer je jeden takový program.

Nepotvrzené přidělení přes celou stránku haldy stránky

Základní provedení přes celou stránku haldy potvrdí dvě stránky menší než jedna stránka přidělování. Jednu stránku se používá pro přidělení uživatele a druhý zpřístupněna non-na konec vyrovnávací paměti.

Účelem přetečení zásobníku lze zjistit pomocí zóny vyhrazené virtuální prostor, místo-přístupné potvrzené stránky. Výjimku narušení přístupu dochází při procesu dotýká dané vyhrazené virtuální prostor. Tento přístup může snížit spotřebu paměti až o 50 procent. Další informace naleznete v tématu parametr / zruší .

Pravděpodobnost vkládání

Správce hald stránky můžete ovládat tak, že některé přidělení jsou záměrně. To je užitečné v simulace nedostatku paměti bez použití skutečně všechny systémové prostředky.

Zadejte číslo od 1 do 10 000 představuje pravděpodobnost, že přidělení se nezdaří. Pomocí pravděpodobnosti 10 000 zajistíte, že 100 procent přidělení nezdaří. Pravděpodobnost 2.000 Určuje, že přibližně 20 procent přidělení nezdaří.

Správce hald stránky má zvláštní péče, aby se zabránilo pravděpodobnost vkládání v obou prvních 5 sekund života je proces a cesty kódu zavaděč systému Windows NT (pro exampole, Funkce LoadLibrary, FreeLibrary). Pokud není dostatečná Povolit proces k dokončení spuštění 5 sekund, můžete zadat delší časový limit na začátku procesu. Další informace naleznete v tématu parametr /fault .

Při použití parametru /fault a testovány proces obsahuje chybu, bude vyvolána výjimka. Obecně důvodem je, že operaci přidělení vrácena hodnota NULL a později aplikace pokusí o přístup přidělené paměti. Protože se nezdařilo přidělení, však nelze získat přístup paměti a proto dochází k narušení přístupu.

Dalším důvodem, že je vyvolána výjimka je aplikace se pokouší řešit selhání přidělení, že neuvolní některé prostředky. Tato manifesty jako nevracení paměti a je obtížné ladit.

K diagnostice těchto selhání správce hald stránky udržuje historie trasování zásobníku v okamžiku poruchy vstřikování. Tyto stopy mohou být zobrazeny pomocí příkazu ladicího programu:

! -p -f [číslo ze stopy] haldy

Ve výchozím nastavení rozšíření se zobrazí pouze poslední čtyři stopy.

Při spuštění aplikace automaticky připojení ladicího programu

Některé aplikace jsou obtížné spuštění z příkazového řádku nebo jejich vytvoření, technologií od ostatních procesů. Tyto aplikace určete, že vždy, když jsou spuštěny ladicího programu budou automaticky připojena k nim. To je užitečné, pokud stránku haldy je povoleno, že dojde k selhání procesu a haldy. Další informace naleznete v tématu parametr/debug .

Pageheap.exe je účinné při použití ověření jakýkoli proces přidělení paměti, včetně přidělení stylu C++ nové a odstranit, dokud funkce vlastní přidělení/volných nakonec volání do rozhraní pro správu haldy NT (který je RtlAllocateHeap, RtlFreeHeap). K tomu jsou zaručeny následující funkce:
  • Funguje jako HeapAlloc, HeapFree, HeapReAlloc: tyto funkce jsou exportovány pomocí souboru kernel32.dll a volání přímo do NT haldy rozhraní. Funguje jako GlobalAlloc, GlobalFree GlobalReAlloc: tyto funkce jsou exportovány pomocí souboru kernel32.dll a volání přímo nebo nepřímo do haldy rozhraní NT.
  • Funguje jako LocalAlloc, LocalFree LocalReAlloc: tyto funkce jsou exportovány pomocí souboru kernel32.dll a volání přímo nebo nepřímo do haldy rozhraní NT.
  • Funkce malloc, bez, realloc, Mvelikost, rozbalte: tyto funkce jsou exportovány pomocí msvcrt.dll a volání přímo nebo nepřímo do haldy NT. To nebylo vždy případ. C Runtime používaný k provádění různých haldy, ale aktuální C run-time volá přímo do haldy NT.
  • Operátory nové, Odstranit, nové [] , [] : tyto funkce jsou exportovány pomocí msvcrt.dll a volání přímo nebo nepřímo do haldy NT.
Jinou sadu funkcí přidělení/volných pravděpodobně vlastní schéma a není zaručeno volání přímo nebo nepřímo do haldy NT. Pouze zdrojový kód kontroly nebo spuštění v rámci ladicího programu můžete odhalit skutečného provedení.

Vyhněte se použití statické propojení. Některé aplikace byly staticky propojené do staré verze C runtime. Tyto starší verze systému Windows NT haldy rozhraní API Nevolejte a Pageheap.exe nelze použít k ověření rozdělení těchto prostředků. Dynamické propojení zajišťuje, že dostanete nejnovější knihovny C runtime (msvcrt.dll).

Třídy chyby nalezené Pageheap.exe

Pageheap.exe zjistí většina haldy související chyby; je však zaměřena na problémů poškození haldy a není zaměřena na těsnost. Pageheap.exe má omezený úspěch s vyhledání nevrácené haldy má funkce pro tento cíl.

Jednou z výhod Pageheap.exe je, že mnoho chyb jsou zjištěny v případě dějí. Například Chyba vypnout o jednobajtových na konci dynamicky přidělené vyrovnávací paměti může způsobit narušení okamžitý přístup. Existuje několik typů chyb, které nelze rozpoznat při jejich výskytu. V těchto případech chybové zprávy je zpožděn, dokud je uvolněno bloku.
  • Neplatný haldy ukazatel: všechny Win32 a Windows NT úrovně haldy rozhraní přijmout jako první parametr ukazatele do haldy kde má proběhnout operace. Správce hald stránky neplatný haldy ukazatel zjistí v okamžiku volání je provedeno.
  • Ukazatel bloku neplatný haldy: po bloku je přidělen, jej lze použít jako parametr pro několik haldy rozhraní, zejména free() třídy rozhraní. Správce hald stránky okamžitě rozpozná ukazatel bloku neplatný haldy. Viz ladění selhání stránky haldy pro způsob, jak zjistit, zda neplatná adresa je několik bajtů vypnout nebo je zcela nesprávný.
  • S více podprocesy nesynchronizované přístup do haldy: některé aplikace volají do haldu z více vláken. Tento typ scénář vyžaduje nastavení příznaku (uživatelem), která spustí načítání zámku haldy. Správce hald stránky zjistí porušení tohoto typu při dvou podprocesů pokusit volání současně do haldy.
  • Předpoklady o přerozdělení blok na stejné adrese: přerozdělení operace není zaručeno vrátit na stejnou adresu. To platí zejména při přerozdělení snižuje velikost bloku. Některé aplikace předpokládat že které přerozdělení se vrátí na stejnou adresu. Správce hald stránky vždy alokuje nový blok při přeřazení a uvolňuje staré bloku. Pro čtení a zápis je chráněna volného bloku, a proto všechny přístup k němu bude zvýšení narušení přístupu.
  • Uvolnění: tuto chybu, pokud jsou stejné bloky haldy uvolněno několikrát, je běžné v některých aplikacích. To je zjištěný okamžitě správce hald stránky protože, druhý volno, bude blok není správnou předponu záhlaví a nebyl nalezen mezi přidělené bloky. Viz ladění selhání stránky haldy pro způsoby, jak analyzovat trasování zásobníku zdarma první operace. Tato chyba může být varianta problém přerozdělení, protože při aplikace uvolní, co předpokládá, že je to adresa bloku, tento blok již byl uvolněn v rámci přerozdělení.
  • Přístup blok po uvolnění: uvolněné paměti bloky drží na krátkou dobu správce hald stránky ve fondu chráněné paměti. Přístup k těmto blokům bude zvýšení narušení přístupu. Založené na principu "místo", většinu potíží by měl být zachycena Pokud fondu volných médií chráněných je dostatečně velký. Pokud uvolněné blok je stále chráněný fond, je okamžitě zachycena chyb. Však pokud paměť byla znovu, pak je menší pravděpodobnost nalezení chyb nebo identifikační kód, který ji způsobil.
  • Přístup po konec přidělené bloku: správce hald stránky umístí nepřístupné stránku bezprostředně za přiděleného bloku. Přístup po konec bloku bude zvýšení narušení přístupu. Některé aplikace očekávají přidělení být zarovnané 8bajtové. Tato funkce byla podporována od vedoucích haldy systému Windows NT verze 3.5. Velikost požadavku, který není zarovnané 8bajtové bude stále získat adresu zarovnané 8bajtové ale to opustí několik bajtů na konci bloku, které jsou stále přístupné. Pokud aplikace poškodí pouze několik bajtů, bude chyba zachycených pouze kontrolou vzorek přípona bloku při uvolněno bloku.
  • Přístup před začátku bloku přidělené: správce hald stránky může být nastavena pomocí nastavit příznak, na konci, ale na začátek bloku umístíte nepřístupná stránka. Přístup před začátku bloku bude zvýšení narušení přístupu.
SelháníNormální stránku haldyPřes celou stránku haldy
Neplatný haldy ukazatelOkamžitě zachycenaOkamžitě zachycena
Ukazatel bloku neplatný haldyOkamžitě zachycenaOkamžitě zachycena
Nesynchronizované přístupOkamžitě zachycenaOkamžitě zachycena
Předpoklad o rozdělení adres90 % až do skutečné volné90 % ulovených okamžitě
Dvojité uvolnění90 % ulovených okamžitě90 % ulovených okamžitě
Znovu použít po uvolnění.90 % až do skutečné volné90 % ulovených okamžitě
Přístup po konec blokuZachycena při volnéOkamžitě zachycena
Přístup před začátku blokuZachycena při volnéOkamžitě zachycena (speciální příznak)

Ladění chyb stránek haldy

Další informace o ladění chyb stránek haldy podívejte se na Aplikace Compatibility Tookit Reference k dispozici uvnitř sady Application Compatibility Toolkit.

Syntaxe Pageheap.exe a Příklady použití Pageheap.exe podívejte se na Aplikace Compatibility Tookit Reference k dispozici uvnitř sady Application Compatibility Toolkit.

Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
294895 jak získat sadu Windows Application Compatibility Toolkit

Vlastnosti

ID článku: 286470 - Poslední kontrola: 23. 1. 2017 - Revize: 1

Váš názor