Jak używać Pageheap.exe w systemie Windows XP, Windows 2000 i Windows Server 2003

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 286470 - Zobacz jakich produktów dotyczą zawarte w tym artykule porady.
Rozwiń wszystko | Zwiń wszystko

Na tej stronie

Streszczenie

W tym artykule opisano sposób używania narzędzia strony sterty (Pageheap.exe) w systemie Microsoft Windows XP, Microsoft Windows 2000 i Microsoft Windows Server 2003.

Więcej informacji

Pageheap.exe ustawia flagi sterty strony, które ułatwiają znajdowanie uszkodzenie sterty związane. Może także pomóc wykrywania przecieków w programach, które są z systemem Windows XP i Windows 2000 Professional Z dodatkiem Service Pack 2 (SP2) Systemów profesjonalnych.

Sprawdzanie poprawności oprogramowanie wprowadza Pageheap.exe warstwy (menedżera sterty strony) między aplikacją a system, który sprawdza wszystkie operacje pamięci dynamicznej (alokacje, zwolnienia i innych operacji stosu). Po włączeniu menedżera sterty strony aplikacji, która jest badany jest następnie uruchomiona w debugerze. Jeśli wystąpi problem spowoduje debugera podział.

Ważne Pageheap.exe określa ten błąd występuje, ale będzie crash system w przypadku napotkania problemu. Umożliwia weryfikację, warstwy już istnieje w bibliotekach Ntdll.dll systemu w systemie Windows 2000 Professional Z dodatkiem SP2 i Windows XP Professional. Pageheap.exe nie będzie działać w poprzednim wersje systemu Microsoft Windows.

Jeśli aplikacja testowanego nie jest uruchomiona w debugerze i napotkał błąd, po prostu awarii bez wszelkie opinie.

Pojęcia

Typowy problem w opracowywanie aplikacji jest uszkodzenie sterty. To zwykle występuje, gdy aplikacja przydziela blok pamięci sterty Podany rozmiar, a następnie zapisuje na adresy pamięci poza żądanego rozmiaru Blok sterty. Uszkodzenie sterty może również wystąpić, gdy aplikacja zapisuje do blokowania pamięci, która już została zwolniona.

Dwa pojęcia są kluczowym elementem Opis polecenia związane z Pageheap.exe i sposób użycia go:
  • Odnaleziono albo umieszczając występujących w blokach sterty dostępne strony na końcu przydziału lub sprawdzając wypełnienia wzorce po bloku zostaje zwolniony.
  • Istnieją dwa stert (sterty całostronicową i zwykłą stronę sterty) dla każdego stosu utworzone w ramach procesu ma strony sterty włączenia.
    • Cała strona sterty wykaże występujących w blokach sterty, umieszczając niedostępny strony na końcu przydziału. Zaletą tego podejścia jest użytkownik "nagła śmierć", co oznacza, że proces będzie uzyskiwać dostęp do osiągnięcia naruszają (AV) dokładnie w punkcie uderzenia awarii. To zachowanie ułatwia błędy debugowania. Wadą jest to, co alokacji korzysta z co najmniej jedną stronę popełnione pamięć. Proces dużej ilości pamięci można szybko zasoby systemowe wyczerpane.
    • Sterta zwykłą stronę może być używany w sytuacjach, gdy ograniczenia ilości pamięci renderowania Sterta całostronicową bezużyteczny. Podczas sterty, blok jest zwalniane, sprawdza deseni wypełnienia. Zaletą tej metody jest to, że drastycznie zmniejsza zużycie pamięci. Wadą jest to, że skorygowanie zostanie tylko wykryty po bloku zwolniona. Dzięki temu awarie trudniejsze do debugowania.

Pobieranie lokalizacji dla narzędzia Pageheap

Aby pobrać najnowszy pakiet narzędzi debugowania, kliknij następujące łącza:
http://www.microsoft.com/whdc/devtools/Debugging/default.mspx


Wybierz najnowszą wersję narzędzi debugowania. Po zainstalowaniu narzędzia Zaznacz Niestandardowe instalacji, a następnie zainstaluj, aby katalog o nazwie właściwe. Na przykład zainstalować narzędzia do C:\Debug lub C:\Debugtools.

Wybieranie metody zbadanie skorygowanie bloku sterty

Najczęściej występujących w blokach stosu można wykryte w jednym dwa sposoby:
  • Cała strona sterty: Umieść stronę dostępne na końcu Alokacja.
  • Normalny sterty: wypełnienia wyboru wzorców, kiedy uzyskuje bloku zwolniona.

Cała strona sterty

Cała strona sterty powinien być włączony dla poszczególnych procesów lub w obszarze ograniczonym parametry dla dużych procesów z powodu jego pamięci wysokiej wymagania. To nie można włączyć całego systemu, ponieważ trudno jest Ocena wymagany rozmiar pliku. Za pomocą pliku stronicowania, który jest za mały z systemowe całostronicową sterty renderuje rozruch systemu.

W Zaletą całostronicową sterty jest powoduje procesu do dostępu naruszają (AV) dokładnie w punkcie uderzenia awarii. To ułatwia Niepowodzenie debugowania. W celu Aby mieć możliwość określenia awarii, najpierw użyć sterty zwykłą stronę do określenia zakres, w przypadku gdy niepowodzenie procesu, a następnie polecenie Użyj całej strony sterty na poszczególnych skalę procesów, w tym z ograniczeniami klasy alokacje (to znaczy zakres określonego rozmiaru lub określonej biblioteki).

Zwykłe strony sterty

Sterta zwykłą stronę mogą być używane do testowania z dużą skalę procesy bez zużycia pamięci wysokiej wymaga tego stosu całej strony. Jednak sterty zwykłą stronę opóźnia wykrywania, dopóki bloki są zwalniane, dzięki czemu awarie utrudnia debugowanie.

Na ogół używany sterty zwykłą stronę dla badania wstępnego procesów dużą skalę. Następnie, jeśli zostały wykryte problemy Włącz całostronicową sterty ograniczeniami klasy alokacje w tych procesy.

Sterta zwykłą stronę może być bezpiecznie włączone całego systemu dla wszystkich procesy. Jest to bardzo użyteczne na stołowe Badanie tarczowe, które wykonują ogólnego systemu Sprawdzanie poprawności, zamiast składnik ukierunkowane badania. Można także sterty zwykłą stronę włączone dla jednego procesu.

GFlags przy użyciu systemowe strony sterty

W GFlags narzędzie służy do włączania sterty strony całego systemu. W celu Polecenie GFlags, aby zaczęły obowiązywać, należy ponownie uruchomić komputer po wystawiania polecenie.

Aby włączyć sterty zwykłą stronę systemowe:
  1. W wierszu polecenia wpisz:gflags - r + hpa

  2. Uruchom ponownie komputer.
Aby wyłączyć sterty zwykłą stronę systemowe:
  1. W wierszu polecenia wpisz:gflags - r - hpa

  2. Uruchom ponownie komputer.
Uwaga Inne ustawienia GFlags są przydatne podczas włączania strony sterty. Inne ustawienia wyświetlany jest związany z sterty są włączone, a następnie strona błędy stosu można wprowadzić ze względu na konflikty między menedżera sterty strony i te flagi sterty "nieszkodliwy".

Korzystanie z jednego stosu strony procesu GFlags

Można włączyć sterty strony do monitorowania jednego określonego procesu. Aby zrobić to, wykonaj następujące kroki:
  1. W wierszu polecenia Zmień katalog, w którym zainstalowano debugowania narzędzia.
  2. W wierszu polecenia wpisz następujące polecenie, a następnie naciśnij klawisz WPROWADŹ:
    / Enable /p Gflags.exeLSASS.exe
    Uwaga LSASS.exe oznacza nazwę procesu, które chcesz monitorować za pomocą narzędzia Pageheap.
  3. Nie ma potrzeby monitorowania sterty strony, wyłączenie funkcji monitorowania. Aby to zrobić, wpisz następujące polecenie w wierszu polecenia, a następnie naciśnij klawisz WPROWADŹ:
    / Disable /p Gflags.exe LSASS.exe
    Uwaga LSASS.exe oznacza nazwę procesu, które chcesz monitorować za pomocą narzędzia Pageheap.
  4. Aby wyświetlić listę wszystkich programów, które obecnie ma Pageheap weryfikacji włączone, wpisz w wierszu polecenia, a następnie Naciśnij klawisz WPROWADŹ:
    Gflags.exe /p

Alokacje odwołań do niewyrównanych

Zawsze gwarantowało menedżerów sterty systemu Windows (wszystkie wersje) Alokacje sterty że adres początkowy, który jest 8-bajtowa wyrównania (na 64-bitowych platformach wyrównanie jest 16 bajtów). Powoduje, że strony menedżera sterty takie same gwarancje. Jest to niemożliwe, jednakże, jeśli chcesz mieć koniec z alokacji dokładnie na końcu strony. Dokładne zakończenia od strony alokacji jest potrzebny, aby błąd off według jednobajtowych wyzwoli odczytu lub zapis do-dostępnej strony i spowodować natychmiastowe usterek.

Jeżeli Użytkownik zażądał rozmiar bloku jest 8-bajtowa wyrównany, następnie strony sterty nie można spełnić "adres 8-bajtowa wyrównany start" i "end adres strony ograniczenia ustawione". Roztwór jest aby spełniać ograniczenie pierwszy i początek bloku 8-bajtowa wyrównane. Użyć deseniu wypełnienia małych między koniec bloku i start-dostępnej strony. Ten deseń wypełnienia może być od 0 bajtów przez 7 bajty długości na architektur 32-bitowych. Wypełnienie deseń jest sprawdzany po wolne.

W razie potrzeby wykrywania usterek natychmiastowe dla tych przydziałów, które w przeciwnym razie będą miały deseniu wypełnienia na końcu strony menedżera sterty Ignoruj regułę 8-bajtowa wyrównanie i zawsze wyrównywanie koniec alokacji na granicy strony przy użyciu / odwołań do niewyrównanych i / full Parametry. Aby uzyskać więcej informacji, zobacz temat / odwołań do niewyrównanych parametr.

UWAGA: Zakładają 8-bajtowa wyrównanie i one, że niektóre programy Stop działa poprawnie z / odwołań do niewyrównanych parametr. Program Microsoft Internet Explorer jest jeden taki program.

Niezakończone stron dla całej strony Alokacje sterty

Realizacji stosu całostronicową core zatwierdza dwóch stron dla każdego Alokacja jest mniejszy niż jedna strona. Jedna strona jest używana dla alokacji użytkownika i druga staje się niedostępny na końcu buforu.

Przekroczenia końca buforu można wykryć za pomocą strefę zarezerwowane wirtualnych miejsca zamiast niedostępny zaangażowane strony. Naruszenie zasad dostępu wyjątek występuje wtedy, gdy proces styka się z tym zarezerwowane miejsce wirtualne. To podejście można zredukować zużycie pamięci o 50 procent. Aby uzyskać więcej informacji informacje, zobacz / umorzone parametr.

Prawdopodobieństwo iniekcji błędów

Można kontrolować menedżera sterty strony tak, aby niektóre są celowo nie powiodło się. Jest to przydatne przy symulowaniu warunków braku pamięci bez faktycznie przy użyciu wszystkich zasobów systemowych.

Określ liczbę od 1 do 10 000 do reprezentowania prawdopodobieństwo, że przydział zakończy się niepowodzeniem. Za pomocą prawdopodobieństwo 10 000 gwarantuje 100 procent alokacji zakończy się niepowodzeniem. A prawdopodobieństwo 2,000 Określa, że około 20 procent alokacji nie powiedzie się.

Menedżera sterty strony zajmuje szczególne starania, aby uniknąć uszkodzenia wtrysk w obu pierwszych 5 sekund życia tego procesu i systemu Windows NT Moduł ładujący ścieżki (exampole, LoadLibrary, FreeLibrary). Jeśli nie jest 5 sekund wystarczająca do procesu, aby pełne uruchomienia, można określić dłuższego limitu czasu na początku procesu. Aby uzyskać więcej informacji, zobacz temat /fault parametr.

Kiedy używać /fault Parametr i proces testowanego ma błąd wyjątku będzie uruchamiany. Na ogół przyczyną jest operacji alokowania zwrócona wartość NULL, a później aplikacja próbuje uzyskać dostęp przydzielonego pamięć. Ponieważ allocate nie powiodło się, jednak pamięci nie jest dostępny, a zatem nastąpi naruszenie zasad dostępu.

Inne przyczyny, jest wyjątek jest aplikacja próbuje przeciwdziałania alokacji błąd, ale nie zwalnia niektórych zasobów. To manifesty jak przeciek pamięci i jest trudniejszy do debugowania.

Aby pomóc w zdiagnozowaniu te awarie, strony menedżera sterty zachowuje historię ślady stosu od momentu z prawdopodobieństwo iniekcji błędów. Ślady te mogą być wyświetlane z następujących debugera polecenia:

! sterty -p -f [liczba ŚLADÓW]

Domyślnie rozszerzenie będą wyświetlane tylko ostatni cztery śladów.

Automatyczne dołączanie debugera podczas uruchamiania aplikacji

Niektóre aplikacje są trudne do uruchamiania z wiersza polecenia lub są zduplikowanego z innych procesów. Dla tych aplikacji należy określić, że w każdym przypadku, gdy zostaną uruchomione debugera zostaną automatycznie dołączone do nich. Jest to przydatne, jeśli strony sterty jest włączona dla tego niepowodzenia procesu i sterty występują. Aby uzyskać więcej informacji, zobacz temat / Debug parametr.

Pageheap.exe obowiązuje do Sprawdź każdy proces alokacji pamięci, w tym alokacje styl C++ nowych i Usuń tak długo, jak funkcje niestandardowe alokacji/wolne po pewnym czasie wywołują NT interfejsy zarządzania sterty (to znaczy, RtlAllocateHeap, RtlFreeHeap). W następujące funkcje są gwarantowane w tym celu:
  • Działa podobnie jak HeapAlloc, HeapFree, HeapReAlloc: Wywożone przez kernel32.dll tych funkcji i bezpośrednio wywołać w interfejsach sterty NT. Działa podobnie jak GlobalAlloc, GlobalFree, GlobalReAlloc: Te funkcje są wywożone przez kernel32.dll i wywołać albo bezpośrednio lub pośrednio do NT sterty interfejsów.
  • Działa podobnie jak Funkcja LocalAlloc, Funkcji LocalFree, LocalReAlloc: Te funkcje są wywożone przez kernel32.dll i wywołać albo bezpośrednio lub pośrednio do NT sterty interfejsów.
  • Funkcje funkcja malloc, wolne, realloc, Mrozmiar, Rozwiń węzeł: Te funkcje są wywożone przez msvcrt.dll i albo zadzwoń bezpośrednio lub pośrednio do sterty NT. To nie zawsze było sprawy. C używane do realizacji różnych sterty, ale c bieżącego czasu wykonywania wykonywania wywołań bezpośrednio do sterty NT.
  • Operatory Nowy, Usuń, [nowy] , Usuń] : Te funkcje są wywożone przez msvcrt.dll i albo zadzwoń bezpośrednio lub pośrednio do sterty NT.
Wszelkie inne alokacji/wolny zestaw funkcji, prawdopodobnie jest niestandardowy System i nie jest gwarantowane wywołać bezpośrednio lub pośrednio do NT sterty. Tylko źródłowy kod kontroli lub można ujawnić uruchomiony w debugerze Rzeczywista implementacja.

Należy unikać łączenie statycznego. Niektóre aplikacje zostały statycznie połączonych do starej wersji środowiska wykonawczego języka C. Te stare wersje nie wymagają sterty systemu Windows NT interfejsów API i nie można Pageheap.exe Sprawdź te alokacje. Dynamiczne łączenie zapewnia uzyskiwanie najnowszych c Biblioteka wykonawcza (msvcrt.dll).

Klasy błędów znalezionych przez Pageheap.exe

Pageheap.exe wykrywa większość błędów związanych z sterty; jest jednak koncentruje się na problemy z uszkodzeniem sterty i przecieki nie koncentruje się na. Została Pageheap.exe Sukces ograniczone ze znajdowaniem przecieki sterty, chociaż ma funkcje to docelowe.

Jedną z zalet Pageheap.exe jest tak wielu błędy są wykrywane, gdy wystąpią. Na przykład błąd off według jednobajtowych na koniec dynamicznie przydzielonego buforu może powodować natychmiastowy dostęp naruszenie. Istnieje kilka typów błędów, które nie mogą być wykryte podczas ich występują. W takich przypadkach raport o błędach jest opóźnione aż do bloku zostaje zwolniony.
  • Wskaźnik stosu nieprawidłowy: Jako pierwszy przyjąć interfejsów poziomu sterty Win32 wszystkie i Windows NT Parametr wskaźnika do sterty, gdzie powinno mieć miejsce operacji. Strony menedżera sterty wykryje w momencie utworzenia wywołanie jest wskaźnik stosu nieprawidłowy dokonane.
  • Sterta nieprawidłowy wskaźnik bloku: Po bloku jest przydzielana, mogą być używane jako parametr dla sterty kilka interfejsów, szczególnie free() klasy interfejsów. Strony sterty Menedżer wykrywa natychmiast wskaźnik bloku nieprawidłowy sterty. Zobacz stronę debugowania Błędy stosu sposób ustalenia, czy nieprawidłowy adres jest kilka bajtów lub jest całkowicie niepoprawna.
  • Wielowątkowe niezsynchronizowane dostępu do sterty: Niektóre aplikacje wywołują sterty z wielu wątków. To scenariusz wymaga ustawienie flagi (przez użytkownika), które wyzwoli Pobieranie blokadzie sterty. Strony menedżera sterty wykryje tego rodzaju naruszenia Podczas próby sterty wywołują jednocześnie dwa wątki.
  • Założenia dotyczące zmiany alokacji bloku pod tym samym adresem: Zwraca taki sam nie jest gwarantowane operacja zmiany alokacji adres. Jest to szczególnie ważne, gdy konieczna zmiana alokacji zmniejsza rozmiar blok. Niektóre aplikacje przyjęto założenie, że tego ponowny przydział zwraca ten sam adres. Menedżera sterty strony zawsze przydziela nowego bloku podczas zmiany alokacji i zwalnia stare bloku. Wolne bloku jest chroniony prawem do odczytu i zapisu, oraz w związku z tym jakikolwiek dostęp do niego podniesie naruszenie zasad dostępu.
  • Podwójnego zwalniania: Ta usterka gdzie samego bloki sterty są zwalniane jest kilka razy wspólne w niektórych aplikacjach. Jest wykrywane natychmiast przez strony sterty Menedżer, ponieważ przy drugim wolne, bloku nie będzie miał prawidłowego prefiksu Nagłówek i nie można znaleźć wśród przydzielonego bloków. Zobacz debugowanie strony sterty Awarie sposoby analizowania ślad stosu pierwszej operacji wolne. To błąd może być wariantem problem konieczna zmiana alokacji, ponieważ, jeśli zwalnia aplikację co uważa, że jest to adres bloku, że bloku już zwolniona w ramach konieczna zmiana alokacji.
  • Dostęp blok po wolny: Bloki zwolnionej pamięci są przechowywane przez krótki czas przez strony sterty Menedżer w puli pamięci chronionej. Podniesie dostępu do tych bloków naruszenie zasad dostępu. W oparciu o zasadę "Miejscowość" większość problemów powinny być złowione Jeśli chronionych wolnej puli jest wystarczająco duża. Jeśli blok zwolnionej jest nadal w puli chronionych wpadł błyskawicznie błędu. Jednakże jeśli pamięć została ponownie, a następnie jest mniejsza znajdowanie błędu lub identyfikacji kod, która ją wywołała.
  • Dostęp po zakończeniu przydzielonego bloku: Niezwłocznie umieszcza menedżera sterty strony Strona niedostępna Po przydzielonego bloku. Dostęp do wszystkich poza koniec bloku podniesie naruszenie zasad dostępu. Niektóre aplikacje oczekiwać alokacje być wyrównane do 8-bajtowe. Ta funkcja została obsługiwana od menedżerów sterty systemu Windows NT 3.5. Żądanie rozmiar, który nie jest wyrównany do 8-bajtowa będzie nadal jest wyświetlany adres ustawione 8-bajtowe, ale To pozostawia kilka bajtów po zakończeniu bloku, które są nadal dostępne. Jeśli aplikacja uszkodzi tylko kilka bajtów, następnie błąd zostanie przechwycony tylko przez sprawdzanie deseń sufiks blok po bloku zostaje zwolniony.
  • Dostęp przed rozpoczęciem przydzielonego bloku: Menedżera sterty strony można poinstruować poprzez Ustawialne flagi Aby umieścić na początku bloku, a nie od Strona niedostępna Data zakończenia. Dostęp, przed początek bloku podniesie programu access naruszenie.
Zwiń tę tabelęRozwiń tę tabelę
BłądSterta zwykłą stronęCała strona sterty
Wskaźnik stosu nieprawidłowyBłyskawicznie złowionychZłowionych natychmiast
Sterta nieprawidłowy wskaźnik blokuZłowionych natychmiastBłyskawicznie złowionych
Niezsynchronizowane dostępuBłyskawicznie złowionychZłowionych natychmiast
Założeń dotyczących zmiany alokacji adresów90% do czasu rzeczywistego wolne90% ryb złowionych natychmiast
Podwójnego zwalniania90% ryb złowionych natychmiast90% ryb złowionych natychmiast
Ponowne użycie po wolny90%, dopóki rzeczywiste wolne90 % błyskawicznie złowionych
Dostęp po koniec blokuZłowionych na wolneBłyskawicznie złowionych
Dostęp przed rozpoczęciem blokuZłowionych na wolneBłyskawicznie złowionych (specjalną flagę)

Debugowanie błędów strony sterty

Aby uzyskać więcej informacji na debugowanie strony stosu awarii Szukaj w Odwołanie Tookit zgodności aplikacji dostępne wewnątrz zgodności aplikacji Zestaw narzędzi.

Dla Składnia z Pageheap.exe i Przykłady korzystania z Pageheap.exe znajdziesz Odwołanie Tookit zgodności aplikacji dostępne wewnątrz zgodności aplikacji Zestaw narzędzi.

Aby uzyskać więcej informacji zobacz poniżej Artykuł bazy wiedzy Microsoft Knowledge Base:
294895 Informacje o uzyskiwaniu zestawu Windows Application Compatibility Toolkit

Właściwości

Numer ID artykułu: 286470 - Ostatnia weryfikacja: 22 czerwca 2011 - Weryfikacja: 2.0
Informacje zawarte w tym artykule dotyczą:
  • 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
Słowa kluczowe: 
kbenv kbinfo kbmt KB286470 KbMtpl
Przetłumaczone maszynowo
WAŻNE: Ten artykuł nie został przetłumaczony przez człowieka, tylko przez oprogramowanie do tłumaczenia maszynowego firmy Microsoft. Firma Microsoft oferuje zarówno artykuły tłumaczone przez ludzi, jak i artykuły tłumaczone maszynowo, dzięki czemu każdy użytkownik może uzyskać dostęp do całej zawartości bazy wiedzy Knowledge Base we własnym języku. Prosimy jednak pamiętać, że artykuły przetłumaczone maszynowo nie zawsze są doskonałe. Mogą zawierać błędy słownictwa, składni i gramatyki, przypominające błędy robione przez osoby, dla których język użytkownika nie jest językiem ojczystym. Firma Microsoft nie odpowiada za wszelkie nieścisłości, błędy lub szkody spowodowane nieprawidłowym tłumaczeniem zawartości oraz za wykorzystanie tej zawartości przez klientów. Oprogramowanie do tłumaczenia maszynowego jest często aktualizowane przez firmę Microsoft.
Anglojęzyczna wersja tego artykułu to:286470

Przekaż opinię

 

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