Pageheap.exe Windows XP, Windows 2000 ve Windows Server 2003 nasıl kullanılır?

Makale çevirileri Makale çevirileri
Makale numarası: 286470 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu makalede sayfa öbek nasıl kullanılır (Pageheap.exe), Microsoft Windows XP, Microsoft Windows 2000 ve Microsoft Windows Server 2003'de aracı.

Daha fazla bilgi

Pageheap.exe ilgili öbek Bozulması bulmak için Yardım sayfası öbek bayraklarını ayarlar. Bu da sızıntıları Windows 2000 Professional Service Pack 2 (SP2) ve Windows XP Professional sistemlerinde çalışan programlarda algılanmasına yardımcı olabilir.

Uygulama ve tüm dinamik bellek işlemleri doğrulayan sistemi arasındaki bir yazılım doğrulama katman (sayfa öbek Yöneticisi) Pageheap.exe tanıtır (ayırmalar, serbest bırakma ve diğer yığın işlemleri). Sayfa öbek Yöneticisi etkin olduğunda, sınanmakta olan uygulama daha sonra bir hata ayıklayıcı altında başlatıldı. Bir sorunla karşılaştı, hata ayıklayıcısını sonu neden olur.

Önemli Hata nedir Pageheap.exe belirtmez, ancak bir sorunla karşılaştı, sistem kilitlenmesine. Windows 2000 Professional SP2 ve Windows XP Professional'da Ntdll.dll sistem kitaplıkları zaten bir doğrulama katmanının etkinleştirir. Pageheap.exe, Microsoft Windows'un önceki sürümlerinde çalışmayacak.

Sınanmakta olan uygulama, bir hata ayıklayıcı altında başlatılmaz ve bir hata oluştu, yalnızca tüm görüş kilitlenmesine.

Kavramları

Bir genel uygulama geliştirmede yığın bozulması sorundur. Bu, genellikle uygulamanın belirli bir boyutu yığın bellek ayırır ve bellek adresleri istenen boyuta yığın bloğunun dışına yazar oluşur. Bir uygulama zaten serbest belleğin engellemek yazma yığın bozulması da oluşabilir.

Iki kavram Pageheap.exe ve kullanmak için bir yol ile ilgili komutlar anlamak için merkezi şunlardır:
  • Öbek bloklar halinde bozulmaları ya da erişilebilir olmayan bir sayfa sonuna, tahsisat yerleştirerek veya blok serbest zaman dolgu desenleri denetimi bulunduğunda.
  • Sayfa öbek etkinleştirilmiş olan bir işlem içinde oluşturulan her yığın iki kümeler (tam sayfa yığını ve normal sayfa öbek) vardır.
    • Tam sayfa bir yığın, tahsisat sonunda erişilebilir olmayan bir sayfa yerleştirerek bozulmaları öbek bloklar halinde gösterir. Bu yaklaşımın avantajı "sudden işlemi erişecek anlamı ölümü," elde edilir (AV) tam olarak hata noktasına ihlal ediyor. Bu davranış hataları hata ayıklamasını kolaylaştırır. Olumsuz yanı, her tahsisat Kaydedilmiş bellek, en az bir sayfa kullanmasıdır. Adres yoğun bellek işlemi için sistem kaynaklarının hızla kalmadı.
    • Normal sayfa öbek burada bellek sınırlamaları tam sayfa öbek kullanılamamasına neden olan durumlarda kullanılabilir. Bir yığın bloğunun serbest zaman dolgu desenleri kontrol eder. Bu yöntemin avantajı, büyük bellek tüketimini azaltır ' dir. Olumsuz yanı, blok serbest zaman bozulmaları yalnızca algılanacaktır emin olur. Bu hataları hata ayıklama zorlaştırır.

Konum için Pageheap aracı yükleyin

En son hata ayıklama araçları paketini karşıdan yüklemek için aşağıdaki bağlantıyı tıklatın:
http://www.microsoft.com/whdc/devtools/debugging/default.mspx


Hata ayıklama araçlarının en son sürümünü seçin. Araçları yüklediğinizde, özel yüklemeyi seçin ve sonra da uygun bir adla dizine yükleyin. Örneğin, araçlara C:\Debug veya C:\Debugtools yükleyin.

Öbek Block bozulmaları araştırmak için bir yöntem seçme

Öbek bloklar halinde bozulmaları çoğu aşağıdaki iki yöntemden biriyle bulunabilecek:
  • Tam sayfa öbek: erişilebilir olmayan bir sayfa tahsisat sonuna koyun.
  • Normal sayfa öbek: blok serbest, denetimi dolgu desenleri.

Full-Page öbek

Tam sayfa öbek yüksek bellek gereksinimleri nedeniyle, büyük işlemler için sınırlı parametreleri altında veya tek tek işlemler için etkinleştirilmelidir. Gerekli bir sayfa dosyası boyutu değerlendirmeniz zor olduğundan, sistem genelinde etkinleştirilemez. Sistem genelinde tam sayfa öbek ile çok küçük bir sayfa dosyası kullanarak sistem yeniden önyükleme yapamayan işler.

Tam sayfa öbek bir işlemin neden üstünlüktür erişim ihlal eden (AV) tam olarak noktasında hata oluştu. Bu hatanın hata ayıklama kolaylaştırır. Hataları gösterecek kullanabilmek için bir işlemi başarısız oluyor aralığı belirlemek için önce normal sayfa öbek kullanın ve sonra tam sayfa öbek tek tek büyük ölçekli işlemleri ayırmalar (diğer bir deyişle, belirli bir boyutu aralığı veya belirli bir kitaplığı) sınırlı o sınıf için kullanın.

Normal sayfa öbek

Normal sayfa öbek olmadan yüksek bellek tüketimi, büyük ölçekli işlemlerin tam sayfa bu öbek sınama için kullanılabilir gerektirir. Ancak, engeller, böylece hataları hata ayıklamak daha zor hale serbest kadar normal sayfa öbek algılama erteler.

Genel olarak, normal sayfa öbek sınama ilk büyük ölçekli işlemler için kullanın. Sorun algılanırsa, <a0></a0> tam sayfa öbek sınırlı bir sınıfın ayırmaların bu işlemlerinde daha sonra etkinleştirin.

Normal sayfa öbek, tüm işlemler için güvenli bir etkin sistem genelinde olabilir. Bileşen odaklanmış sınama yerine genel sistem doğrulaması gerçekleştiren sınama benches çok yararlıdır. Normal sayfa öbek Ayrıca tek bir işlem için etkinleştirilebilir.

Sistem özel sayfa öbek ile GFlags kullanma

GFlags aracı, sistem genelinde sayfa öbek etkinleştirmek için kullanılır. Sonra komut vermek sırasıyla GFlags komutunun etkinleştirilmesi bilgisayarınızı yeniden başlatmalısınız.

Sistem genelinde bir normal sayfa öbek etkinleştirmek için <a0></a0>:
  1. Komut satırında aşağıdakileri yazın: gflags - r + hpa

  2. Bilgisayarınızı yeniden başlatın.
Sistem genelinde bir normal sayfa öbek devre dışı bırakmak için <a0></a0>:
  1. Komut satırında aşağıdakileri yazın: gflags - r - hpa

  2. Bilgisayarınızı yeniden başlatın.
Not Sayfa öbek etkinleştirdiğinizde, diğer GFlags ayarları yararlıdır. Yığın hataları sayfa sayfa yığın yöneticisinin bu "zararsız" yığın bayrakları arasındaki çakışmaları yüzünden sunulan sonra yığına ilgili gibi görünen diğer ayarlar, etkinse.

Tek bir işlem sayfası öbek ile GFlags kullanma

Bir özel işlem izlemek sayfa öbek etkinleştirebilirsiniz. Bunu yapmak için şu adımları izleyin:
  1. Komut isteminde, hata ayıklama araçlarının yüklendiği dizine değiştirin.
  2. Komut istemine aşağıdaki komutu yazın ve ENTER tuşuna basın:
    Gflags.exe /p /enable lsass.exe
    Notlsass.exe Pageheap aracıyla izlemek istediğiniz işlemin adını gösterir.
  3. Sayfa yığın izleme artık gerekmeyen izleme devre dışı bırakın. Bunu yapmak için, komut satırına aşağıdaki komutu yazıp ENTER tuşuna basın:
    lsass.exe Gflags.exe /p/disable
    Notlsass.exe Pageheap aracıyla izlemek istediğiniz işlemin adını gösterir.
  4. Pageheap olan tüm programları listelemek için doğrulama etkin, komut isteminde aşağıdakini yazın ve ENTER tuşuna basın:
    Gflags.exe /p

Hizalanmamış Tahsisatları

(Tüm sürümler) Windows öbek yöneticileri her zaman yığın ayırma hizalanmış 8-bayt bir başlangıç adresi olduğunu garanti (64-bit platformlarda hizalamayı 16 bayt'tır). Sayfa yığın yöneticisinin aynı güvence sağlar. Son-ın--tahsisat tam olarak bir sayfa sonunda olmasını istiyorsanız bu ancak, olanaksızdır. Kapalı-tarafından-bir baytlık hata okuma tetikleyici veya erişilebilir olmayan sayfasına yazmak ve hemen bir hataya neden tam sayfa sonu tahsisat gerekir.

Kullanıcı istenen bloğu için hizalı değil 8 bayt boyutudur, sonra sayfayı öbek "adres 8-bayt hizalanmış başlatma" ve "bitiş adresi sayfası hizalanmış" kısıtlamaları karşıladığını edemiyor. Çözüm, ilk Kısıtlamaya uyan ve bloğu 8-hizalı baytın başlangıç yapmaktır. Sonra bir küçük dolgu deseni bloğunun sonuna erişilebilir olmayan sayfa başlangıcı arasındaki kullanın. Bu dolgu deseni, 7 bayt uzunluğunda üzerinde 32-bit mimarileri ile 0 bayt arasında olabilir. Dolgu deseni boş sırasında denetlenir.

Aksi halde, sonunda bir dolgu deseni olacak bu ayırmalardan için hemen hata algılama gerekiyorsa, 8 bayt hizalama Kuralı Yoksay ve her zaman / hizalanmamış ve / tam parametreleri kullanarak bir sayfa sınırı en tahsisat sonuna hizalama sayfasını yığın yöneticisinin olun. Daha fazla bilgi için bkz: / hizalanmamış parametresi.

Not: bazı programlar 8 bayt hizalama ilgili olun ve kullanıcılar / hizalanmamış parametresi düzgün çalışmamaya. Microsoft ınternet Explorer gibi bir program var.

Kaydedilmemiş sayfaları Full-Page yığını ayırması için

Çekirdek tam sayfa öbek uygulaması iki sayfa için herhangi bir sayfadan daha küçük tahsisat kaydeder. Bir sayfa için <a2>Kullanıcı</a2> tahsisat kullanılır ve diğer olmayan erişimli arabellek sonunda yapılır.

Erişilebilir olmayan bir bağımlı sayfa yerine ayrılmış sanal adres alanı, bir alanı kullanarak, son arabellek taşması algılanabilir. Işlem, bu ayrılmış sanal adres alanı dokunduğundan erişim ihlali özel durumu oluşur. Bu yaklaşım, en fazla yüzde 50 bellek tüketimini azaltabilirsiniz. Daha fazla bilgi için bkz: / kaydettikleri parametresi.

Hata ekleme

Bazı ayırmalar kasten başarısız oldu, sayfa yığın yöneticisinin denetleyebilirsiniz. Bu, yetersiz bellek koşullar tüm sistem kaynağı kullanmadan taklit yararlıdır.

Tahsisat başlayamaz olasılığını temsil eden 1 ile 10,000 arasında bir sayı belirtin. Bir olasılık, 10.000 değerinde ayırmaların yüzde 100'e başarısız olacağını eder. 2.000 Olasılığıyla yaklaşık yüzde 20'sini ayırmaları başarısız olacağını belirtir.

Her iki ilk 5 saniye içinde ekleme hatası işlemin ömrü ve Windows NT önlemek için özel bakım sayfası yığın yöneticisinin götüren yükleyicisi kod yollarını (exampole, LoadLibrary, FreeLibrary). 5 Saniye durumda değilse, yeterli işleminizin başlangıç tamamlamak izin vermek, işlemin başında daha uzun bir süre belirtebilirsiniz. Daha fazla bilgi için bkz: / hata parametresi.

/ Hata parametresini kullanın ve sınanmakta olan işlem bir hata varsa, bir özel duruma neden oldu. Bunun nedeni, genellikle, ayırma işlemi NULL döndürdü ve daha sonra uygulama, ayrılan belleğe erişmeye olur. Ayırma başarısız olduğundan, ancak bellek erişilemiyor ve bu nedenle erişim ihlali oluşuyor.

Bir özel duruma neden oldu diğer nedeni, uygulama ayırma hatası ile ilgili çalışır ancak bazı kaynakları serbest bırakmıyor olmasıdır. Bu, bir bellek sızıntısı gibi özelliklerini ve hata ayıklama daha zordur.

Bu hatalar tanılamanıza yardımcı olmak için şu hata ekleme, yığın izlemelerini geçmişi sayfası yığın yöneticisinin tutar. Bu izleri, aşağıdaki hata ayıklayıcı komutu ile görüntülenebilir:

! -p [NUMBER-OF-IZLEMELER] -f yığın

Varsayılan olarak yalnızca son dört izlemeler uzantısını görüntüler.

Bir hata ayıklayıcı uygulama başladığında otomatik olarak ekleme

Bazı uygulamalar, bir komut isteminden başlatmak zordur veya diğer işlemlerden kökenli. Bu uygulamalar için başlatılıncaya her bir hata ayıklayıcı otomatik olarak bunları iliştirilecektir, belirtin. Bu sayfa öbek için işlem ve yığın hataları, etkinleştirilmiş olması durumunda yararlı olur. Daha fazla bilgi için bkz: / debug parametresi.

Herhangi bir bellek ayırma işlemini doğrulamak için kullanılan Pageheap.exe etkilidir, C++ stili yeni bir ayırma ve silme, özel tahsisat/ücretsiz işlevleri, sonuçta NT arama uzunlukta yığın yönetim arabirimleri (RtlAllocateHeap, RtlFreeHeap). Bunu yapmak için aşağıdaki işlevleri garanti altına alınmıştır:
  • HeapAlloc, HeapFree, HeapReAlloc gibi çalışır: Bu işlevleri, kernel32.dll tarafından verilir ve bu çağrıyı doğrudan NT yığın arabirimleri. GlobalAlloc, GlobalFree, GlobalReAlloc gibi çalışır: Bu işlevleri kernel32.dll tarafından verilir ve doğrudan veya dolaylı olarak NT yığın arabirimler arayın.
  • LocalAlloc, LocalFree, LocalReAlloc gibi çalışır: Bu işlevleri kernel32.dll tarafından verilir ve doğrudan veya dolaylı olarak NT yığın arabirimler arayın.
  • Işlev malloc, boş, realloc, msize, genişletin: Bu işlevleri, msvcrt.dll tarafından verilir ve NT yığın, dolaysız veya dolaylı olarak arayın. Bu durum her zaman edilmemiştir. C çalışma-farklı bir yığın bir uygulama, ancak geçerli C çalışma zamanı çağrıları doğrudan NT yığın halinde kullanılacak saat.
  • Işleçler Yeni, silmek, Yeni [], silme []: Bu işlevleri, msvcrt.dll tarafından verilir ve NT yığın, dolaysız veya dolaylı olarak arayın.
Özel bir düzen ve NT, dolaysız veya dolaylı olarak çağırmak için garanti büyük olasılıkla diğer tahsisat/ücretsiz işlevler kümesi yığın. Yalnızca kod incelemesi kaynak ya da hata ayıklayıcı altında çalışan gerçek uygulama gösterebilir.

Statik bağlama kullanmaktan kaçının. Bazı uygulamalar statik olarak bağlı eski bir C çalışma zamanı sürümleri gelir. Bu eski sürümler Windows NT yığın Apı çağrısı ve Pageheap.exe, bu ayırmalardan doğrulamak için kullanılamaz. Dinamik bağlama, aldığınız son C çalışma zamanı kitaplığı (msvcrt.dll) sağlar.

Sınıfları tarafından Pageheap.exe bulunamadı hataları

Çoğu öbek ile ilgili hataların Pageheap.exe algılar; ancak bu öbek Bozulması sorunları odaklanmış ve sızıntıları odaklanmıştır. Bu hedef işlevselliği olsa Pageheap.exe öbek sızıntılarını, bulma ile ilgili başarılı sınırladı.

Pageheap.exe avantajları, durum, birçok hataları algıladı biridir. Örneğin, dinamik olarak atanan bir arabellek sonundaki kapatma-tarafından-bir baytlık hata anında erişim ihlaline neden olabilir. Algılanamayan hatalar oluştuğunda bunların birkaç türü vardır. Blok serbest kadar bu durumda, hata raporunu ertelendiği.
  • Geçersiz bir yığın işaretçisi: tüm Win32 ve Windows NT düzeyi öbek arabirimleri ilk parametre olarak bir işaretçi yığına işlem olmas? alın. Sayfa yığın yöneticisinin, arama yaptığınız şu anda bir geçersiz yığın işaretçisi algılar.
  • Geçersiz bir yığın blok işaretçisi: bloğu ayrılmış sonra birkaç arabirimleri, özellikle free() sınıfı arabirimlerinin yığın için parametre olarak kullanılabilir. Sayfa yığın yöneticisinin hemen bir geçersiz öbek blok işaretçisi algılar. Geçersiz adres birkaç bayt kapatmak veya tamamen yanlış olup olmadığını belirlemek için bir yol için sayfa öbek hataları hata ayıklama</a1> konusuna bakın.
  • Birden çok iş parçacığı eşitlenmemiş erişimi öbek: bazı uygulamalar, birden çok iş parçacığı yığın arayın. Bu tür bir senaryo yığın kilidi alınıyor tetikleyecek bir bayrak (kullanıcı tarafından) gerektirir. Iki iş parçacığı aynı anda öbek arama girişiminde bulunduğunuzda, sayfa yığın yöneticisinin bu tür ihlali algılar.
  • Aynı adres bloğunun tahsisatı ile ilgili: aynı adresi dönmek için BIR Yeniden Tahsisat işlemi sağlanır. Yeniden tahsisatı blok boyutunu küçültür, bu durum özellikle geçerlidir. Bazı uygulamalar, yeniden tahsisat aynı adresi döndürecektir varsayalım. Sayfa yığın yöneticisinin her zaman bir yeniden tahsisat sırasında yeni bir blok ayırır ve eski bloğu boşaltır. Boş bloğu için okuma/yazma erişimi korunur ve bu nedenle erişim ihlali yükseltmek tüm erişimi.
  • Çift boş: Burada aynı öbek blokları birkaç kez serbest, bu hata, bazı uygulamalarda yaygındır. Bu hemen tarafından sayfa yığın yöneticisinin çünkü algılandığında, ikinci üzerinde serbest, blok olacak uygun öneki başlığı varsa ve ayrılmış blokları bulunamıyor. Bkz: hata ayıklama sayfa öbek İlk boş operasyonun yığın izlemesi çözümlenecek yolları başarısız. Uygulama, ne, blok adresidir düşünüyor serbest bırakma, bu engelleme yeniden tahsisatı bir parçası olarak zaten bırakılmış nedeniyle bu hata bir türevini yeniden tahsisat sorun olabilir.
  • Erişim bloğu sonra serbest: bırakılmış belleğe bloklar tarafından korunan bellek havuzu sayfa öbek yöneticisinde kısa bir süre için tutulur. Bu bloğu için herhangi bir erişim erişim ihlali başlatmak. Korumalı serbest havuza yeterince büyükse "konum" ilkesine göre sorunların çoğunu yakalandı. Bırakılmış bloğu hala korumalı havuzda, hata anında yakalandı. Ancak, bellek yeniden, sonra var. daha az olasılığı olan neden kodu tanımlayan ya da hata bulma
  • Ayrılmış bloğunun sonuna sonra erişim: sayfa yığın yöneticisinin tahsis edilen blok hemen erişilemeyen bir sayfaya yerleştirir. Tüm erişim bloğu sonu geçmiş erişim ihlali yükseltmenizi. Bazı uygulamalar, 8-bayt hizalı olması için ayırmalar bekler. Windows NT 3.5 öbek yöneticileri bu yana desteklenen bu özellik. 8 Bayt hizalı olmayan BIR istek boyutu hala 8 bayt hizalanmış bir adresi alır ancak bu bir kaç bayt sonra hala erişilebilir bloğunun sonuna bırakır. Uygulama bu kaç bayt bozarsa, sonra hata blok serbest zaman yalnızca bloğu sonekini desen denetleyerek yakalandı.
  • Erişim önce ayrılmış bloğu başlangıcı: sayfa öbek Yöneticisi ayarlanabilir bir bayrak erişilemeyen sayfa başına bloğunun yerine son yerleştirmek için söylenen. Tüm erişim önce bloğu başlangıcı erişim ihlali neden.
Bu tabloyu kapaBu tabloyu aç
HataNormal sayfa öbekTam sayfa öbek
Geçersiz bir yığın işaretçisiAnında yakalandıAnında yakalandı
Geçersiz bir yığın blok işaretçisiAnında yakalandıAnında yakalandı
Eşitlenmemiş erişimAnında yakalandıAnında yakalandı
Yeniden Tahsisat adresine varsayımıGerçek boş kadar % 90% 90 anında yakalandı
Çift boşaltın.% 90 anında yakalandı% 90 anında yakalandı
Yeniden sonra boşaltın.Gerçek boş kadar % 90% 90 anında yakalandı
Erişim bloğu sonu sonraBoş üzerinde yakalandı.Anında yakalandı
Erişim bloğu başlangıcı önceBoş üzerinde yakalandı.Anında yakalandı (özel bayrak)

Sayfa öbek hataları için hata ayıklama

Sayfa öbek başarısız, hata ayıklama hakkında daha fazla bilgi için lütfen Uygulama Uyumluluk Tookit başvuru Uygulama Uyumluluğu Araç Takımı'içinde kullanılabilir bakın.

Pageheap.exe sözdizimi ve Pageheap.exe kullanım örnekleri için lütfen Uygulama Uyumluluk Tookit başvurusu uygulama uyumluluğunu kullanılabilir bakmak araç.

Ek bilgi için lütfen aşağıdaki Microsoft Knowledge Base makalesine bakın:
294895Windows Uygulama Uyumluluğu Araç Takımı Nasıl Edinilir (Bu bağlantı, bir kısmı veya tamamı İngilizce olan içeriğe işaret edebilir.)

Özellikler

Makale numarası: 286470 - Last Review: 14 Ocak 2009 Çarşamba - Gözden geçirme: 6.0
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003 Datacenter Edition
  • Microsoft Windows XP Professional Edition
  • Microsoft Windows XP Home Edition
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Datacenter Server
Anahtar Kelimeler: 
kbmt kbenv kbinfo KB286470 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:286470

Geri Bildirim Ver

 

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