Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het kernelfoutopsporingsprogramma bepaalt de exacte locatie van een kernelmodusgeheugenlek.
Pooltags inschakelen
U moet eerst GFlags gebruiken om pooltags in te schakelen. GFlags is opgenomen in Hulpprogramma's voor foutopsporing voor Windows. Start GFlags, kies het tabblad Systeemregister , schakel het selectievakje Pooltags inschakelen in en selecteer Toepassen. U moet Windows opnieuw starten om deze instelling van kracht te laten worden.
In Windows Server 2003 en latere versies van Windows is het taggen van pools altijd ingeschakeld.
De pooltag van het lek bepalen
Om te bepalen welke pooltag is gekoppeld aan het lek, is het meestal het eenvoudigst om het hulpprogramma PoolMon voor deze stap te gebruiken. Zie PoolMon gebruiken om Kernel-Mode geheugenlekken te vinden voor meer informatie.
U kunt ook het kernelfoutopsporingsprogramma gebruiken om te zoeken naar tags die zijn gekoppeld aan grote pooltoewijzingen. Volg hiervoor deze procedure:
Laad alle modules opnieuw met behulp van de opdracht .reload (Reload Module ).
Gebruik de extensie !poolused . Voeg de vlag '4' toe om de uitvoer te sorteren op gebruik van gepaginad geheugen:
kd> !poolused 4 Sorting by Paged Pool Consumed Pool Used: NonPaged Paged Tag Allocs Used Allocs Used Abc 0 0 36405 33930272 Tron 0 0 552 7863232 IoN7 0 0 10939 998432 Gla5 1 128 2222 924352 Ggb 0 0 22 828384Bepaal welke pooltag is gekoppeld aan het grootste geheugengebruik. In dit voorbeeld gebruikt het stuurprogramma met de tag 'Abc' het meeste geheugen, bijna 34 MB. Daarom is het geheugenlek waarschijnlijk in dit stuurprogramma.
Het lek vinden
Nadat u hebt vastgesteld dat de pooltag is gekoppeld aan het lek, volgt u deze procedure om het lek zelf te vinden:
Gebruik de opdracht ed (Waarden invoeren) om de waarde van de globale systeemvariabele PoolHitTag te wijzigen. Deze globale variabele zorgt ervoor dat de debugger pauzeert telkens wanneer een pooltag wordt gebruikt die overeenkomt met de waarde ervan.
Stel PoolHitTag in op de tag die u vermoedt de bron van het geheugenlek te zijn. De modulenaam 'nt' moet worden opgegeven voor een snellere symboolresolutie. De tagwaarde moet worden ingevoerd in de little-endian-indeling (dat wil gezegd achterwaarts). Omdat pooltags altijd vier tekens zijn, is deze tag eigenlijk A-b-c-spatie, niet alleen A-b-c. Gebruik dus de volgende opdracht:
kd> ed nt!poolhittag ' cbA'Als u de huidige waarde van PoolHitTag wilt controleren, gebruikt u de opdracht db (Geheugen weergeven):
kd> db nt!poolhittag L4 820f2ba4 41 62 63 20 AbcHet foutopsporingsprogramma wordt verbroken telkens wanneer die pool wordt toegewezen of vrijgemaakt met de tag Abc. Telkens wanneer het foutopsporingsprogramma op een van deze toewijzingen of gratis bewerkingen wordt onderbreekt, gebruikt u de kb-foutopsporingsprogrammaopdracht (Weergave Stack Backtrace) om de stacktrace weer te geven.
Met deze procedure kunt u bepalen welke code die zich in het geheugen bevindt, overbezet met de tag Abc.
Als u het onderbrekingspunt wilt wissen, stelt u PoolHitTag in op nul:
kd> ed nt!poolhittag 0
Als er verschillende plaatsen zijn waar geheugen met deze tag wordt toegewezen en deze zich in een toepassing of stuurprogramma bevinden die u hebt geschreven, kunt u de broncode wijzigen om unieke tags te gebruiken voor elk van deze toewijzingen.
Als u het programma niet opnieuw kunt compileren, maar u wilt bepalen welke van de verschillende mogelijke locaties in de code het lek veroorzaakt, kunt u de code op elke locatie losmaken en het foutopsporingsprogramma gebruiken om deze code te bewerken die zich in het geheugen bevindt, zodat elk exemplaar een afzonderlijke (en eerder ongebruikte) pooltag gebruikt. Laat het systeem vervolgens enkele minuten of langer worden uitgevoerd. Nadat enige tijd is verstreken, meldt u zich opnieuw aan met het foutopsporingsprogramma en gebruikt u de extensie !poolfind om alle pooltoewijzingen te vinden die aan elk van de nieuwe tags zijn gekoppeld.