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

Překlady článku Překlady článku
ID článku: 286470 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

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

Další informace

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

Pageheap.exe zavádí ověření vrstvu softwaru (haldy stránky správce) mezi aplikací a systému, který ověřuje všech operací dynamické paměti (přidělení, uvolní a dalších operací haldy). Při povolené správce stránky haldy aplikace, která je právě testován potom spuštěna pod ladicí program. Pokud zjistila problém způsobí přerušení ladicího programu.

Důležité: Pageheap.exe neurčuje je chybu, ale při zjistila problém jej bude selhání systému. Umožňuje ověření vrstvy, který již existuje v knihovnách Ntdll.dll systému v systému Windows 2000 Professional SP2 a Windows XP Professional. Pageheap.exe nebude fungovat v předchozích verzích systému Microsoft Windows.

Pokud testovány aplikace není spuštěna pod ladicí program zjistil chybu, bude právě selhání bez jakékoli názory.

Koncepty

Běžné potíže v vývoj aplikací je poškození haldy. K tomu obvykle dochází, pokud aplikace přiděluje bloku haldy paměti dané velikosti a zapíše do adresy paměti přesahující požadovaná velikost bloku haldy. Poškození haldy může dojít také při aplikace zapisuje blok paměti, která má již byl uvolněn.

Dvě Koncepty jsou centrální Principy příkazy související se Pageheap.exe a způsob jeho použití:
  • Poškození haldy bloky jsou zjištěny umístěním buď nejsou přístupné stránku 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í poškození haldy bloky umístěním stránky nejsou přístupné na konci přidělení. Výhodou tento přístup je dosáhnout "sudden smrti," což znamená, že proces bude přístup k porušení přesně v okamžiku straně selhání (AV). Toto chování usnadňuje selhání ladění. Nevýhodou je každý přidělení používá alespoň jedna stránka svěřené paměti. Pro proces náročné na paměť systémové prostředky mohou být rychle vyčerpán.
    • Normální stránku haldy lze použít v situacích, kde omezení paměti vykreslení 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ýznamně snižuje spotřebu paměti. Nevýhodou je, že poškození pouze rozpoznán při uvolněno bloku. Tím selhání těžší ladění.

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

Stáhnout balíček nástroje nejnovější ladění, klepněte na následující odkaz:
http://www.microsoft.com/whdc/devtools/debugging/default.mspx


Vyberte poslední verzi nástroje ladění. Při instalaci nástroje vyberte Vlastní instalace a potom nainstalujte adresář s odpovídající název. Například nainstalovat nástroje C:\Debug nebo C:\Debugtools.

Volba metody prozkoumat poškození bloku haldy

Většina poškození v blocích haldy můžete zjištěných v dvěma způsoby:
  • Přes celou stránku haldy: umístěte na konci přidělení stránky nejsou přístupné.
  • Normální stránku haldy: vzorků výplně Kontrola při bloku získává uvolněno.

Full-Page haldy

Přes celou stránku haldy by měla být povolena pro jednotlivé procesy nebo pod omezené parametry pro velké procesy z důvodu jeho požadavků vysoké paměti. Jej nelze povolit celý systém, protože je obtížné vyhodnotit velikost souboru požadované stránky. Pomocí stránky souboru, který je příliš malý s přes celou stránku haldy celý systém vykreslí systému unbootable.

Výhodou přes celou stránku haldy je, že způsobuje proces k porušení přístupu (AV) přesně v okamžiku straně selhání. Snadno selhání k ladění. Aby bylo možné zdůraznit selhání, nejprve použít normální stránku haldy určit oblast, kde selhání procesu a potom použijte haldy přes celou stránku na jednotlivé procesy rozsáhlých pro dané omezeným třídy přidělení (rozsah určité velikosti nebo konkrétní knihovny).

Normální stránka haldy

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

Obecně použít normální stránku haldy pro testování počáteční rozsáhlých procesy. Pokud jsou zjištěny problémy poté povolte přes celou stránku haldy omezeným třídy přidělení těchto procesů.

Normální stránku haldy lze bezpečně povoleno celý systém pro všechny procesy. To je velmi užitečné v benches test provést ověření obecné systémové, nikoli součást zaměřený testování. Normální stránku haldy může být povolena pro jeden proces.

Pomocí stránky haldy systému Wide GFlags

Nástroje GFlags slouží k povolení haldy stránky celý systém. Pořadí pro příkaz GFlags se projeví až po vydat příkazu je třeba restartovat počítač.

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

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

  2. Restartujte počítač.
Poznámka: Povolit haldy stránky jsou užitečné žádné GFlags nastavení. Pokud jsou povoleny další nastavení, které se zobrazují související do haldy, mohou být chyby stránky haldy zavedena kvůli konfliktům mezi správce hald stránce a tyto příznaky haldy "neškodnost".

Pomocí Single haldy procesu stránky GFlags

Můžete povolit haldy stránky sledovat jeden konkrétní proces. Postupujte takto:
  1. Na příkazovém řádku změňte adresář, kde nainstalován ladicí nástroje.
  2. Na příkazovém řádku zadejte následující příkaz a poté stiskněte klávesu ENTER:
    Gflags.exe /p /enable lsass.exe
    Poznámka:lsass.exe zastupuje název procesu, který chcete sledovat nástroj Pageheap.
  3. Při sledování haldy stránky již nepotřebujete, zakázat sledování. Chcete-li to provést, zadejte do příkazového řádku následující příkaz a stiskněte klávesu ENTER:
    /P/disable Gflags.exe lsass.exe
    Poznámka:lsass.exe zastupuje název procesu, který chcete sledovat nástroj Pageheap.
  4. Do seznamu všechny programy, které jste aktuálně Pageheap ověření povoleno, zadejte následující příkazového řádku a stiskněte klávesu ENTER:
    Gflags.exe /p

Nezarovnaný rozdělení

Vedoucí haldy Windows (všechny verze) mají vždy zaručit přidělení haldy mít počáteční adresa je zarovnán 8 bajtů (na 64bitových platformách zarovnání je 16 bajtů). Stránka správce hald díky stejné záruky. To je nemožné, však Pokud chcete mít end z the přidělení přesně na konci stránky. Přesné přidělení konec stránky je potřeba tak, aby chyba vypnutí podle jednobajtových bude aktivační událost pro čtení nebo zápisu do stránky nejsou přístupné a způsobit okamžité poruchy.

Pokud je uživatel požadoval velikost pro blok není 8bajtových zarovnány, potom haldy stránky nelze splnit "zahájení adresu 8-bajt zarovnány" a "end adresu stránky zarovnány" omezení. Řešením je splňují první omezení a provést zahájení blok 8bajtových zarovnány. Potom použít vzorek výplně malé mezi konci bloku a zahájení stránce nejsou přístupné. Tento vzorek výplně může být od 0 až 7 bajtů délka 32bitové architekturou bajtů. Vzorek výplně je kontrolována při zdarma.

Pokud okamžité poruchy zjišťování potřeby pro tyto přidělení jinak bude mít vzorek výplně na konci, zkontrolujte správce hald stránky ignorovat pravidlo 8bajtových zarovnání a vždy pomocí parametrů / nezarovnaný a / Úplné zarovnat konec přidělení na hranice stránky. Další informace naleznete v tématu parametr / nezarovnaný.

Poznámka: Některé programy proveďte předpoklady o 8 bajtů zarovnání a přestat pracovat správně s parametr / nezarovnaný. Microsoft Internet Explorer je takový program.

Nepotvrzený stránky Full-Page přidělení haldy

Implementace jádra přes celou stránku haldy potvrdí dvě stránky menší než jedna stránka žádné přidělení. Jedna stránka používá pro přidělení uživatele a druhý zpřístupněna non-na konec vyrovnávací paměti.

Konec vyrovnávací přesahující rozpoznán pomocí zóny rezervované místo virtuální namísto stránky nejsou přístupné potvrzené. 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ž 50 procent. Další informace naleznete v tématu parametr / decommit.

Vkládání poruchy

Správce hald stránky můžete řídit, takže záměrně se nezdařilo některé přidělení. 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ředstavovat pravděpodobnost přidělení se nezdaří. Pomocí pravděpodobnosti 10 000 zajistíte 100 procent přidělení nezdaří. Pravděpodobnost 2.000 Určuje přibližně 20 procent přidělení nezdaří.

Správce hald stránky trvá zvláštní pozornost vyhnout vkládání poruchy v obou prvních 5 sekund životnosti v procesu a Windows NT loader cesty kódu (pro exampole, funkce LoadLibrary, FreeLibrary). Pokud není dostatečná povolit proces dokončit spuštění 5 sekund, můžete zadat delší časový limit na začátku procesu. Další informace naleznete v tématu parametr / poruchy.

Při použití parametru / poruchy a má proces testovány chybu výjimku aktivována. Obecně je důvod pro tuto operaci přidělení vrácena 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 dojde k porušení přístupu.

Důvod, výjimka je aktivována je aplikace pokusí zacházet s selhání přidělení ale není uvolněte některé prostředky. Tato projeví jako nevracení paměti a je obtížnější ladění.

K diagnostice těchto selhání udržuje správce hald stránku Historie trasování zásobníku z chvíli vkládání poruchy. Tyto trasování lze zobrazit příkazem ladicího programu následující:

! haldy [NUMBER OF trasování] -p -f

Ve výchozím nastavení příponu zobrazí pouze poslední čtyři trasování.

Automaticky připojení Debugger při spustí aplikaci.

Některé aplikace jsou obtížné spuštění z příkazového řádku nebo jejich jsou vytvořený z jiné procesy. Tyto aplikace určit, že při každém spuštění, ladicího programu bude automaticky připojen k nim. To je užitečné, pokud stránku haldy je povoleno, dojít k selhání procesu a haldy. Další informace viz parametr / debug.

Pageheap.exe je účinné při použití ověřte jakýkoli proces přidělení paměti, včetně stylu C++ přidělení nové a odstranit dlouhý jako do NT nakonec volání funkce vlastní přidělení a uvolnění haldy rozhraní správy (RtlAllocateHeap, RtlFreeHeap). K tomu je zaručena následující funkce:
  • Funguje jako HeapAlloc, HeapFreeHeapReAlloc: Tyto funkce jsou exportovány podle kernel32.dll a volání přímo do NT haldy rozhraní. Funguje jako GlobalAlloc, GlobalFreeGlobalReAlloc: Tyto funkce jsou exportovány kernel32.dll a volání přímo nebo nepřímo do haldy rozhraní NT.
  • Funguje jako LocalAlloc, LocalFreeLocalReAlloc: Tyto funkce jsou exportovány kernel32.dll a volání přímo nebo nepřímo do haldy rozhraní NT.
  • Funkce malloc, volné, realloc, msize, rozbalte: Tyto funkce jsou exportovány msvcrt.dll a volání přímo nebo nepřímo do haldy NT. Toto není byl vždy případ. C spuštění čas používá mít různé haldy implementace, ale volání aktuální C Runtime přímo do haldy NT.
  • Operátory nové, Odstranit, nové [], Odstranit []: Tyto funkce jsou exportovány msvcrt.dll a volání přímo nebo nepřímo do haldy NT.
Pravděpodobně je vlastní schéma a není zaručeno volání přímo nebo nepřímo do NT sadu funkcí žádné další volné/přidělení haldy. Pouze zdrojový kód kontroly nebo spuštěný pod ladicí program může odhalit Skutečná implementace.

Vyhněte se použití statické propojení. Některé aplikace byly staticky propojený s původní verzí modul C runtime. Tyto staré verze volání haldy WINDOWSNT API a Pageheap.exe nelze použít k ověření těchto přidělení. Dynamické propojení zajišťuje získat nejnovější knihovně C runtime (msvcrt.dll).

Třídy chyby nalezené Pageheap.exe

Pageheap.exe zjistí většina chyby související haldy; však je zaměřeno na problémů poškození haldy a není zaměřený na nevracení. Pageheap.exe má omezený úspěch s vyhledání nevrácené haldy, přestože má funkce tento cíl.

Jednou z výhod Pageheap.exe je, že mnoho chyb jsou zjištěny při jejich dojít. Například Chyba vypnutí podle 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 vyskytují. V těchto případech je zpožděné zprávy o chybách dokud uvolněno bloku.
  • Neplatný haldy ukazatele: rozhraní úrovně haldy Win32 vše a WINDOWSNT trvat jako první parametr ukazatele do haldy kde by mělo nastat operace. Stránka Správce haldy zjistí neplatný haldy ukazatel v okamžiku volání provedeno.
  • Ukazatel bloku neplatný haldy: Po přidělené blok jej lze použít jako parametr pro několik haldy rozhraní zejména free() třídy rozhraní. Správce haldy stránku okamžitě zjistí ukazatel bloku neplatný haldy. V tématu Debugging 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 podprocesů. Tento typ scénář vyžaduje nastavením příznaku (uživatelem), které aktivují načítání zámku haldy. Stránka správce hald zjistí tento typ narušení při pokus o volání současně do haldy dvou podprocesů.
  • Předpoklady o přerozdělení blok na stejné adrese: operace přerozdělení není zaručeno vrátíte stejná adresa. To platí zejména při přerozdělení snižuje velikost bloku. Některé aplikace předpokládat vrátí stejnou adresu, které přerozdělení. Stránka správce hald vždy alokuje nový blok během přerozdělení a uvolní staré bloku. Pro přístup pro čtení a zápis je chráněna volného bloku a proto budou všechny přístup zvýšit narušení přístupu.
  • Dvojité uvolnění: Tato chyba, kde jsou stejné bloky haldy uvolněno několikrát, je běžné v některých aplikacích. Toto je zjištěný okamžitě správce hald stránky protože, na druhý uvolnit, bude blok není mají správné předponu záhlaví a nemůže být nalezen mezi přidělené bloky. Viz ladění stránky haldy Selhání způsoby analyzovat trasování zásobníku volného první operace. Tato chyba může být variant problém přerozdělení, protože při aplikace uvolní, co jej thinks je adresa bloku, byl daný blok již uvolněn jako část přerozdělení.
  • Přístup blok po uvolnění: bloků paměti uvolněné zachovány krátkou dobu správcem haldy stránky ve fondu chráněné paměti. Přístup k těmto bloků bude zvýšení narušení přístupu. Na základě principu "místo" většinu problémů by měl být zachycena Pokud volného fondu chráněný je dostatečně velký. Pokud je stále v chráněné fondu uvolněné blok, chyba zachycených okamžitě. Však Pokud byla opakovaně paměť, pak je menší pravděpodobnost hledání chybu nebo identifikace kódu, který ji vyvolal.
  • Přístup po konec přidělené bloku: umístí stránku správce hald nepřístupné stránku bezprostředně následujících přidělené bloku. Jakýkoli přístup za koncem bloku bude zvýšení narušení přístupu. Některé aplikace očekávají přidělení být zarovnány 8 bajtů. Tato funkce má byla podporována od vedoucích haldy Windows NT 3.5. Velikost požadavku, který není zarovnán 8bajtových stále získat zarovnaný adresu 8 bajtů, ale to ponechá několik bajtů po konec bloku, které jsou stále přístupné. Pokud aplikace poškodí pouze těch několik bajtů, bude být chyba zachycených pouze kontrolou vzorek přípona blok po bloku uvolněno.
  • Přístup před zahájením přidělené bloku: může být stránku správce hald pokyn prostřednictvím nastavitelnou příznak umístit na začátku bloku spíše než na konci stránky nepřístupná. Jakýkoli přístup před začátku bloku bude zvýšení narušení přístupu.
Zmenšit tuto tabulkuRozšířit tuto tabulku
SelháníNormální stránku haldyPřes celou stránku haldy
Neplatný haldy ukazatelZachycený okamžitěZachycený okamžitě
Ukazatel bloku neplatný haldyZachycený okamžitěZachycený okamžitě
Nesynchronizované přístupZachycený okamžitěZachycený okamžitě
Předpokladů o adresu přerozdělenídokud skutečné volné 90 %okamžitě zachycena 90 %
Dvojité uvolněníokamžitě zachycena 90 %okamžitě zachycena 90 %
Znovu použít po uvolněnídokud skutečné volné 90 %okamžitě zachycena 90 %
Přístup po konec blokuZachycený při volnéZachycený okamžitě
Přístup před začátku blokuZachycený při volnéZachycený okamžitě (speciální příznak)

Ladění chyb stránek haldy

Další informace o ladění chyb stránek haldy prosím prohlédněte Application Compatibility Tookit Reference k dispozici uvnitř sady Application Compatibility Toolkit.

Syntaxe Pageheap.exe a Příklady použití Pageheap.exe prosím prohlédněte Application Compatibility Tookit Reference k dispozici uvnitř Application Compatibility Toolkit.

Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
294895Jak získat sadu Windows Application Compatibility Toolkit (Tento článek může obsahovat odkazy na anglický obsah (dosud nepřeložený).)

Vlastnosti

ID článku: 286470 - Poslední aktualizace: 14. ledna 2009 - Revize: 6.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Home Edition
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Datacenter Server
Klíčová slova: 
kbmt kbenv kbinfo KB286470 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:286470

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com