Het gebruik van Pageheap.exe in Windows XP, Windows 2000 en Windows Server 2003

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 286470 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Op deze pagina

Samenvatting

In dit artikel wordt beschreven hoe u met het hulp programma pagina Heap (Pageheap.exe) in Microsoft Windows XP, Microsoft Windows 2000 en Microsoft Windows Server 2003.

Meer informatie

Pageheap.exe instellen pagina heap vlaggen die helpen bij het zoeken beschadiging van heap gerelateerd. Het kan ook detecteren lekkage in programma's die zijn uitgevoerd op Windows 2000 Professional Service Pack 2 (SP2) en Windows XP Professionele systemen.

Pageheap.exe introduceert een validatie software laag (pagina opslagruimtebeheer) tussen de toepassing en het systeem dat wordt gecontroleerd alle bewerkingen op dynamisch geheugen (toewijzingen, vrij, en andere bewerkingen heap). Wanneer de pagina Heap-beheer is ingeschakeld, is de toepassing die wordt getest vervolgens onder een debugger gestart. Als er een probleem wordt aangetroffen, wordt een fout opsporingsprogramma einde.

BelangrijkPageheap.exe geeft geen fout is, maar het zal lopen het systeem wanneer een probleem wordt aangetroffen. U kunt hiermee een verificatie die laag Er bestaat al in het systeembibliotheken Ntdll. dll in Windows 2000 Professional SP2 en Windows XP Professional. Pageheap.exe werkt niet op vorige versies van Microsoft Windows.

Als de toepassing wordt getest niet in een fout opsporingsprogramma wordt gestart en een fout wordt aangetroffen, wordt slechts zonder vast lopen alle feedback.

Concepten

Een veelvoorkomend probleem in de ontwikkeling van toepassingen is beschadiging van de heap. Dit gebeurt meestal wanneer een toepassing wordt toegewezen een blok heap-geheugen van een grootte en schrijft vervolgens toegekend aan geheugen adressen buiten de gevraagde omvang van de heap-blok. Beschadiging van de heap kan ook optreden wanneer u een toepassing schrijft blokkeren geheugen is al vrijgemaakt.

Twee concepten zijn centrale informatie over de opdrachten met betrekking tot Pageheap.exe en de manier om het te gebruiken:
  • Beschadigingen in heap blokken worden ontdekt door beide plaatsen een niet-toegankelijke pagina aan het einde van de toewijzing of door u opvulling controleren patronen wanneer het blok wordt vrijgemaakt.
  • Er zijn twee heaps (paginagrote heap en normale pagina heap) voor elke opslag ruimte gemaakt binnen een proces dat is pagina heap ingeschakeld.
    • Paginagrote heapbeschadigingen in heap blokken blijkt dat door een niet-toegankelijke plaatsen pagina aan het einde van de toewijzing. Het voordeel van deze aanpak is dat u "dood," wat betekent dat het proces wordt toegang tot bereiken schenden (AV) precies op het moment van de storing. Hierdoor is fouten gemakkelijk op te sporen. Het nadeel is dat elke toewijzing gepleegd ten minste één pagina wordt geheugen. Voor een proces geheugen intensief kunnen systeembronnen snel worden uitgeput.
    • Normale pagina heapkan worden gebruikt in situaties waar geheugen beperkingen weer geven paginagrote heap onbruikbaar. Opvulpatronen gecontroleerd wanneer een blok opslag ruimte is vrijgemaakt. Het voordeel van deze methode is het geheugen verbruik drastisch vermindert. Het nadeel is dat beschadigingen alleen gedetecteerd wanneer het blok vrij gegeven. Hierdoor kunt u fouten moeilijker te debuggen.

Download locatie voor het hulp programma Pageheap

De meest recente fout opsporings hulp programma's pakket wilt downloaden, klikt u op de volgende koppeling:
http://www.Microsoft.com/whdc/devtools/debugging/default.mspx


Selecteer de nieuwste versie van de hulp programma's voor fout opsporing. Wanneer u de hulp programma's installeert, selecteert u deAangepasteinstallatie en installeer een map met een toepasselijke naam. Bijvoorbeeld naar C:\Debug-hulpprogramma's installeren of C:\Debugtools.

Kiezen van een methode voor het onderzoeken van Heap blok beschadigingen

De meeste van de beschadigingen in heap blokken kan worden gevonden in een twee manieren:
  • Paginagrote heap: plaats een niet-toegankelijke pagina aan het einde van de toewijzing.
  • Normale pagina heap: selectie vullen patronen zodra het blok wordt vrij gegeven.

Paginagrote Heap

Paginagrote heap moet worden ingeschakeld voor afzonderlijke processen of onder beperkte parameters voor grote processen, vanwege het hoge geheugen vereisten. Deze kan niet worden ingeschakeld systeem, omdat het moeilijk te is Evalueer de vereiste wissel bestandsgrootte. Met behulp van een wisselbestand te klein met systeemomvattende paginagrote heap wordt het systeem opgestart.

Het voordeel van paginagrote heap is een proces dat access schenden (AV) precies op het moment van de storing. Dit eenvoudige storing opsporen. In volg orde kunnen lokaliseren storingen eerst gebruik normale pagina heap om vast te stellen voor de Wanneer een proces is mislukt en klik vervolgens op gebruik paginagrote heap op afzonderlijke ber eik grootschalige processen voor die klasse toewijzingen beperkt (dat wil zeggen een bereik bepaalde grootte of een specifieke bibliotheek).

Normale pagina Heap

Normale pagina heap kan worden gebruikt voor het testen van grootschalige processen zonder de hoge geheugen verbruik dat paginagrote heap is vereist. Echter normale pagina heap detectie uitgesteld totdat blokken worden vrijgemaakt, waardoor fouten meer moeilijk op te lossen.

In het algemeen gebruik van normale pagina heap voor de eerste grootschalige processen testen. Vervolgens, als er problemen worden aangetroffen, paginagrote heap voor een beperkte toewijzingen in deze klasse inschakelen processen.

Normale pagina heap kan veilig ingeschakelde systeem voor alle processen. Dit is heel handig op proef banken die algemene systeem uitvoeren validatie plaats gericht onderdelen testen. Dit kan ook normale pagina heap ingeschakeld voor een enkel proces bekijken.

GFlags gebruiken met de systeem pagina Heap

HetGFlagshulp programma wordt gebruikt waarmee de pagina systeem-heap. Om een GFlags-opdracht te activeren, moet u de computer opnieuw opstarten nadat u de opdracht.

Heap systeemomvattende standaard pagina inschakelen:
  1. Typ het volgende bij de opdrachtprompt:gflags - r + hpa

  2. Start de computer opnieuw op.
Heap systeemomvattende standaard pagina uitschakelen:
  1. Typ het volgende bij de opdrachtprompt:gflags - r - hpa

  2. Start de computer opnieuw op.
OpmerkingGeen GFlags-instellingen zijn handig wanneer u pagina-heap. Als andere instellingen die gerelateerd zijn aan de heap zijn ingeschakeld en vervolgens pagina heap fouten kunnen worden ingevoerd wegens om conflicten tussen pagina opslagruimtebeheer en Deze vlaggen "onschadelijk" heap.

Met behulp van GFlags met een enkele pagina opslag ruimte voor processen

U kunt de heap pagina één specifiek proces controle inschakelen. Doen Dit als volgt:
  1. Wijzig bij een opdrachtprompt de map waarin u de fout opsporing hebt geïnstalleerd hulp programma's.
  2. Typ het volgende achter de opdrachtprompt en druk vervolgens op VOER IN:
    Gflags.exe /p /enableLsass. exe
    OpmerkingLsass. exestaat voor de naam van het proces dat u wilt u controleren met het hulp programma Pageheap.
  3. Wanneer u niet langer controle pagina heap, uitschakelen, de controle. Hiertoe typt u de volgende opdracht bij de opdrachtprompt en druk vervolgens op VOER IN:
    Gflags.exe /p /disableLsass. exe
    OpmerkingLsass. exestaat voor de naam van het proces dat u wilt u controleren met het hulp programma Pageheap.
  4. Lijst van alle programma's die momenteel Pageheap zijn verificatie is ingeschakeld, typt u het volgende bij een opdrachtprompt en vervolgens Druk opINVOEREN:
    Gflags.exe /p

Niet uitgelijnde toewijzingen

Altijd gewaarborgd door de heap managers voor Windows (alle versies) (op de heap-toewijzingen dat een beginadres die 8-byte uitgelijnd 64-bits platforms de uitlijning is 16 bytes). Het opslagruimtebeheer pagina maakt de dezelfde garantie. Dit is onmogelijk, maar als u wilt dat de einde-van-de-toewijzing precies aan het einde van een pagina. De precieze einde van pagina toewijzing nodig is, zodat een fout uit 1-byte lees activeert of in de niet-toegankelijke pagina schrijven en een onmiddellijke probleem veroorzaken.

Als de gebruiker verzocht grootte voor het blok is 8-byte uitgelijnd, vervolgens pagina heap niet voldoen aan de "start adres 8-byte uitgelijnd" en de "eind adres pagina uitgelijnde"beperkingen. De oplossing is om te voldoen aan de eerste beperking en de begin van het blok 8-byte uitgelijnd. Gebruikt u een kleine patroon tussen de einde van het blok en het begin van de niet-toegankelijke pagina. Dit patroon kan vanuit 0 bytes tot en met 7 bytes lang op 32-bits architecturen. De opvulling patroon wordt gecontroleerd bij gratis.

Desgewenst onmiddellijk fouten opsporing Zorg voor deze toewijzingen die anders een patroon aan het einde zal hebben, het opslagruimtebeheer pagina negeert de regel 8-byte-uitlijning en altijd uitlijnen de einde van de toewijzing aan de grens van een pagina met behulp van de/ niet uitgelijndeen/Fullparameters. Zie voor meer informatie de/ niet uitgelijndeparameter.

OPMERKING: Sommige programma's maken veronderstellingen over 8-byte-uitlijning en ze Stop correct werken met de/ niet uitgelijndeparameter. Microsoft Internet Explorer is een dergelijk programma.

Niet-doorgevoerde pagina's voor paginagrote heap-toewijzingen

De core paginagrote heap uitvoering doorgevoerd twee pagina's voor alle toewijzing kleiner is dan één pagina. Één pagina wordt gebruikt voor de toewijzing van gebruikers, en de andere is niet-toegankelijk aan het einde van de buffer gemaakt.

Einde van de buffer overlopen kunnen worden gedetecteerd met behulp van een zone van gereserveerde virtuele ruimte, in plaats van een niet-toegankelijke pagina toegewezen. Een toegangs fout uitzondering doet zich voor wanneer het proces dat gereserveerde virtuele ruimte raakt. Dit benadering kunt geheugen verbruik verminderen door maximaal 50 procent. Voor meer informatie informatie, Zie de/ vrijmakingparameter.

Fout injectie

U kunt pagina opslagruimtebeheer regelen zodat bepaalde toewijzingen opzet is mislukt. Dit is handig bij het simuleren van weinig geheugen voorwaarden zonder daadwerkelijk gebruik van alle systeembronnen.

Geef een getal op tussen 1 en 10000 vertegenwoordigen de waarschijnlijkheid dat een toewijzing mislukken. Met behulp van een waarschijnlijkheid van 10000 zorgt ervoor dat 100% van de toewijzingen mislukken. A waarschijnlijkheid van 2000 geeft aan dat ongeveer 20 procent van de toewijzingen mislukken.

Het opslagruimtebeheer pagina neemt speciale zorg om te voorkomen dat fout injectie in zowel de eerste vijf seconden van de levens duur van het proces en de Windows NT Loader code paden (voor exampole LoadLibrary, FreeLibrary). Als vijf seconden niet volstaan om het proces volledig wilt opstarten, kunt u opgeven een langere time-out aan het begin van het proces. Zie voor meer informatie de/faultparameter.

Wanneer u de/faultparameter en het geteste proces heeft een fout, een uitzondering zal worden verhoogd. In het algemeen de reden hiervoor is dat de toewijzings bewerking een NULL geretourneerd en de toepassing later probeert toegang te krijgen tot de toegewezen geheugen. Omdat het toewijzen, echter het geheugen niet toegankelijk, en daarom een toegangs fout optreedt.

De andere reden dat een uitzondering is dat de toepassing probeert te bieden aan de toewijzing fout, maar sommige bronnen niet vrij. Dit komt als een geheugenlek en is het moeilijker om te debuggen.

Om te helpen bij het vasts tellen van deze fouten, het opslagruimtebeheer pagina houdt een geschiedenis van stacktraces vanaf het tijd stip fout injectie. Deze sporen kunnen worden weer gegeven met de volgende fout opsporing opdracht:

! heap--p -f [nummer van sporen]

Standaard de extensie weer gegeven alleen de laatste vier sporen.

Automatisch koppelen een Debugger wanneer de toepassing wordt gestart

Sommige toepassingen zijn moeilijk te starten vanaf een opdrachtprompt of ze zijn geïnitieerd door andere processen. Geef voor deze toepassingen wanneer ze worden gestart, wordt een fout opsporingsprogramma automatisch gekoppeld aan hen. Dit is handig als de pagina heap is ingeschakeld voor die storingen proces en heap optreden. Zie voor meer informatie de/Debugparameter.

Pageheap.exe is effectief wordt gebruikt controleren of een geheugen toewijzings proces, waaronder C++ stijl toewijzingen nieuwe en verwijderen, zolang de aangepaste toewijzings gratis functies uiteindelijk NT aanroepen heap-beheerinterfaces (dat wil zeggen, RtlAllocateHeap, RtlFreeHeap). Het volgende functies wordt gegarandeerd dat:
  • Functies zoalsHeapAlloc,HeapFree,HeapReAlloc: Deze functies door Kernel32. dll worden geëxporteerd en rechtstreeks wordt aangeroepen in het NT-heap-interfaces. Functies zoalsGlobalAlloc,GlobalFree,GlobalReAlloc: Deze functies door Kernel32. dll worden geëxporteerd en roep een direct of indirect heap in het NT-interfaces.
  • Functies zoalsLocalAlloc,Loc alF ree,LocalReAlloc: Deze functies door Kernel32. dll worden geëxporteerd en roep een direct of indirect heap in het NT-interfaces.
  • Functiesmalloc,gratis,opnieuw toewijzen,Meen bepaalde grootte,Vouw: Deze functies worden geëxporteerd door Msvcrt. dll en roep een direct of indirect in NT heap. Dit is altijd het geval. C gebruikt voor een implementatie van verschillende opslag ruimte, maar de huidige C Runtime Runtime-aanroepen rechtstreeks in NT heap.
  • Operatorsnieuwe,verwijderen,[Nieuw],[] verwijderen: Deze functies worden geëxporteerd door Msvcrt. dll en roep een direct of indirect in NT heap.
Een andere toewijzing gratis set van functies is waarschijnlijk een aangepaste schema en is niet gegarandeerd direct of indirect in NT aanroepen heap. Alleen de bron code controle of loopt onder debugger kan onthullen de werkelijke implementatie.

Vermijd het gebruik van statisch koppelen. Sommige toepassingen statisch gekoppelde om oude versies van de C-runtime zijn. Deze oude versies niet Windows NT heap API's aanroepen en Pageheap.exe kan worden gebruikt Controleer of deze toewijzingen. Dynamisch koppelen zorgt ervoor dat u de meest recente c krijgt runtime library (Msvcrt. dll).

Klassen van Bugs gevonden door Pageheap.exe

Pageheap.exe detecteert de meeste heap fouten; het is echter gericht op problemen heap en niet gericht op lekkage. Pageheap.exe is Hoewel deze functionaliteit heeft lekt beperkt succes met het vinden van heap Dit doel.

Een van de voordelen van Pageheap.exe is dat veel fouten worden gedetecteerd wanneer ze zich voordoen. Bijvoorbeeld, een uit één-byte-fout op het einde van een dynamisch toegewezen buffer kan leiden tot een directe toegang schending. Er zijn enkele soorten fouten die niet kunnen worden gedetecteerd wanneer zij optreden. In deze gevallen is het foutrapport uitgesteld totdat het blok is vrij gegeven.
  • Ongeldige heap aanwijzer: Een eerste niveau heap interfaces alle Win32 en Windows NT worden parameter een pointer naar de heap, waar de bewerking moet gebeuren. De pagina een ongeldige heap aanwijzer detecteert opslagruimtebeheer op het moment dat de oproep is aangebracht.
  • Ongeldige heap blok aanwijzer: Na een block is toegewezen, kan worden gebruikt als een parameter voor meerdere heap-interfaces, met name de free() klasse van interfaces. De pagina heap een ongeldige heap blok aanwijzer worden onmiddellijk gedetecteerd. Zie fout opsporing pagina Heap-fouten voor een manier om te bepalen als het ongeldige adres een paar bytes uitgeschakeld is, of volledig onjuist is.
  • Multithreaded ongesynchroniseerd toegang tot de heap: Een heap sommige toepassingen aanroepen vanuit meerdere threads. Dit type scenario vereist een vlag die ervoor zorgt dat (door de gebruiker) een heap vergrendeling verkrijgen. Het opslagruimtebeheer pagina detecteert dit soort overtreding Wanneer probeert twee threads gelijktijdig aanroepen in de heap.
  • Veronderstellingen over de herverdeling van een blok op hetzelfde adres: Een bewerking her toewijzing is niet gegarandeerd om hetzelfde resultaat te krijgen adres. Dit geldt vooral wanneer de herverdeling wordt beperkt door de grootte van de blok. Sommige toepassingen wordt ervan uitgegaan dat herverdeling krijgt hetzelfde adres. Het opslagruimtebeheer pagina altijd een nieuw blok wordt toegewezen tijdens een herverdeling en de oude steen vrij. Vrije blok voor lees-/schrijftoegang, wordt beschermd en Daarom zullen geen toegang hebben tot deze toegangs verhogen.
  • Double free: Deze bug is waar de dezelfde heap blokken vrij komen meerdere keren algemene in sommige toepassingen. Dit wordt onmiddellijk gedetecteerd door de pagina heap Manager, omdat de tweede vrije, het blok hoeft niet het juiste voorvoegsel kop en de toegewezen blokken kan niet worden gevonden. Zie fout opsporing pagina Heap Voor het analyseren van de stacktrace van de eerste vrije bewerking fouten. Dit fout kan een variant van de herverdeling probleem omdat, wanneer de toepassing hoeft wat zij denkt is het adres van het blok dat blok is al vrij gegeven als onderdeel van de herverdeling.
  • Toegang blokkeren na vrij: Vrij gegeven geheugen blokken worden bewaard gedurende een korte tijd door de pagina heap Manager in een groep beschermd geheugen. Geen toegang hebben tot deze blokken veroorzaakt een toegangs fout. Op basis van het beginsel "locatie", de meeste van de problemen moet worden gevangen indien de beschermde groep groot genoeg is. Als het vrij gegeven blok is nog steeds in de beschermde groep de bug direct gevangen. Echter, als de geheugen opnieuw is gebruikt, dan is er minder kans op de bug zoeken of identificeren de code die wordt veroorzaakt.
  • Toegang tot na het einde van de toegewezen blok: De pagina opslagruimtebeheer onmiddellijk een ontoegankelijke pagina geplaatst na het blok toegewezen. Toegang tot voorbij het einde van het blok zal verhogen. Er treedt een toegangs fout. Bepaalde toepassingen verwachten toewijzingen worden 8-byte uitgelijnd. Deze functie is sinds Windows NT 3. 5 heap managers worden ondersteund. Een aanvraag grootte wordt niet uitgelijnd 8-byte krijgt nog steeds een 8-byte uitgelijnd adres, maar Dit laat een paar bytes na het einde van het blok die nog steeds toegankelijk zijn. Als de toepassing beschadigd slechts die paar bytes, zal vervolgens de fout worden gevangen alleen door het achtervoegsel patroon blok controleren wanneer het blok wordt vrijgemaakt.
  • Toegang vóór het begin van de toegewezen blok: Het opslagruimtebeheer pagina kan worden belast met een instelbare vlag de ontoegankelijke pagina plaatsen aan het begin van het blok in plaats van op het einde. Geen toegang hebben voordat het begin van het blok wordt een toegangs verhogen schending.
Deze tabel samenvouwenDeze tabel uitklappen
FoutNormale pagina heapPaginagrote heap
Ongeldige heap aanwijzerDirect gevangenGevangen direct
Ongeldige heap blok aanwijzerGevangen directDirect gevangen
Niet-gesynchroniseerde toegangDirect gevangenGevangen direct
Hypothese over adres toewijzing90% tot real gratis90% direct gevangen
Double free90% direct gevangen90% gevangen direct
Hergebruik na vrij90% tot reële vrij90 % direct gevangen
Toegang na het einde van het blokNa gevangen gratisDirect gevangen
Toegang voor het begin van het blokNa gevangen gratisDirect gevangen (speciale vlag)

Debugging Page Heap storingen

Voor meer informatie over fout opsporing pagina Heap storingen, Raadpleeg bijApplication Compatibility Tookit verwijzingbeschikbaar binnen de compatibiliteit van toepassingen Toolkit.

Voor deSyntaxisvan Pageheap.exe enVoorbeeldenvan Pageheap.exe, RaadpleegApplication Compatibility Tookit verwijzingbeschikbaar binnen de compatibiliteit van toepassingen Toolkit.

Voor meer informatie Zie de volgende Microsoft Knowledge Base-artikel:
294895De Windows Application Compatibility Toolkit downloaden

Eigenschappen

Artikel ID: 286470 - Laatste beoordeling: zaterdag 26 februari 2011 - Wijziging: 2.0
De informatie in dit artikel is van toepassing op:
  • 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
Trefwoorden: 
kbenv kbinfo kbmt KB286470 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende:286470

Geef ons feedback

 

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