Cara menggunakan Pageheap.exe di Windows XP, Windows 2000 dan Windows Server 2003

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 286470 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Artikel ini menjelaskan cara menggunakan alat Page Heap (Pageheap.exe) di Microsoft Windows XP, Microsoft Windows 2000 dan Microsoft Windows Server 2003.

INFORMASI LEBIH LANJUT

Pageheap.exe menetapkan bendera tumpukan halaman yang membantu untuk menemukan tumpukan yang berhubungan dengan korupsi. Itu juga dapat membantu mendeteksi kebocoran dalam program-program yang berjalan pada Windows 2000 Professional Paket Layanan 2 (SP2) dan Windows XP Sistem profesional.

Pageheap.exe memperkenalkan perangkat lunak validasi lapisan (Page Heap manajer) antara aplikasi dan sistem yang memverifikasi semua memori dinamis operasi (alokasi, membebaskan, dan operasi tumpukan lainnya). Ketika manajer Page Heap diaktifkan, aplikasi yang sedang diuji adalah kemudian dimulai di bawah debugger. Jika masalah yang dihadapi, hal itu akan menyebabkan debugger istirahat.

Penting Pageheap.exe tidak menentukan apa bug, tapi itu akan crash sistem ketika masalah yang dihadapi. Ini memungkinkan verifikasi lapisan yang sudah ada di Ntdll.dll sistem perpustakaan di Windows 2000 Professional SP2 dan Windows XP Professional. Pageheap.exe tidak akan bekerja pada sebelumnya Versi Microsoft Windows.

Jika aplikasi yang sedang diuji tidak dimulai di bawah debugger dan bug dijumpai, itu hanya akan kecelakaan tanpa setiap umpan balik.

Konsep

Masalah umum dalam pengembangan aplikasi adalah tumpukan korupsi. Hal ini biasanya terjadi ketika sebuah aplikasi mengalokasikan blok memori tumpukan mengingat ukuran dan kemudian menulis ke alamat memori melampaui ukuran diminta tumpukan blok. Galat memori juga dapat terjadi ketika sebuah aplikasi menulis untuk memblokir memori yang telah dibebaskan.

Dua konsep pusat memahami perintah-perintah yang berhubungan dengan Pageheap.exe dan cara menggunakannya:
  • Korupsi di blok tumpukan ditemukan oleh baik menempatkan Halaman tidak dapat diakses pada akhir alokasi, atau dengan memeriksa isi pola ketika blok dibebaskan.
  • Ada dua tumpukan (halaman penuh tumpukan dan tumpukan halaman normal) untuk setiap tumpukan dibuat dalam proses bahwa telah tumpukan halaman diaktifkan.
    • Halaman penuh tumpukan mengungkapkan korupsi dalam tumpukan blok dengan menempatkan non-diakses Halaman pada akhir alokasi. Keuntungan dari pendekatan ini adalah bahwa Anda mencapai "kematian mendadak," berarti bahwa proses akan mengakses melanggar (AV) tepat di titik dari kegagalan. Perilaku ini memudahkan kegagalan untuk debug. Kerugian adalah bahwa setiap alokasi menggunakan setidaknya satu halaman dari berkomitmen memori. Untuk proses memori-intensif, sumber daya sistem yang dapat dengan cepat habis.
    • Halaman normal tumpukan dapat digunakan dalam situasi di mana memori keterbatasan membuat Halaman penuh tumpukan tidak dapat digunakan. Memeriksa mengisi pola ketika sebuah tumpukan blok dibebaskan. Keuntungan dari metode ini adalah bahwa secara drastis mengurangi pemakaian memori. Kerugian adalah bahwa korupsi hanya dapat dideteksi ketika blok dibebaskan. Hal ini membuat kegagalan sulit untuk debug.

Lokasi download untuk alat Pageheap

Untuk men-download paket alat debug terbaru, klik berikut link:
http://www.microsoft.com/whdc/devtools/debugging/default.mspx


Pilih rilis terbaru dari alat-alat debug. Ketika Anda menginstal alat-alat, pilih Custom instalasi, dan kemudian instal ke sebuah direktori dengan nama yang sesuai. Sebagai contoh, menginstal alat untuk C:\Debug atau C:\Debugtools.

Memilih metode untuk menyelidiki tumpukan blok korupsi

Sebagian besar dari korupsi dalam tumpukan blok dapat ditemukan di salah satu dua cara:
  • Halaman penuh tumpukan: tempat halaman tidak dapat diakses pada akhir Alokasi.
  • Halaman normal tumpukan: Periksa mengisi pola ketika blok dibebaskan.

Halaman penuh tumpukan

Halaman penuh tumpukan harus diaktifkan untuk tiap proses, atau di bawah parameter terbatas untuk proses besar, karena memori tinggi persyaratan. Itu tidak dapat diaktifkan sistem-lebar, karena sulit untuk mengevaluasi ukuran file halaman diperlukan. Menggunakan file halaman yang terlalu kecil dengan sistem-lebar halaman penuh tumpukan menjadikan sistem unbootable.

The keuntungan dari halaman penuh tumpukan adalah bahwa hal itu menyebabkan proses untuk akses melanggar (AV) tepat di titik dari kegagalan. Ini memudahkan kegagalan untuk debug. Dalam rangka untuk dapat menunjukkan kegagalan, pertama menggunakan halaman normal tumpukan untuk menentukan berkisar di mana proses gagal, dan kemudian menggunakan halaman penuh tumpukan pada individu skala besar proses yang terbatas kelas alokasi (yaitu berbagai ukuran tertentu atau perpustakaan tertentu).

Normal halaman tumpukan

Tumpukan halaman normal dapat digunakan untuk pengujian skala besar proses tanpa pemakaian memori tinggi bahwa halaman penuh tumpukan memerlukan. Namun, halaman normal tumpukan penundaan deteksi sampai blok dibebaskan, sehingga kegagalan lebih sulit untuk debug.

Secara umum, menggunakan halaman normal tumpukan untuk awal skala besar proses pengujian. Kemudian, Apabila masalah dideteksi, mengaktifkan halaman penuh tumpukan untuk kelas dibatasi alokasi mereka proses.

Tumpukan halaman normal dapat dengan aman diaktifkan di seluruh sistem untuk semua proses. Hal ini sangat berguna pada test bangku yang melakukan sistem umum validasi, daripada komponen terfokus pengujian. Halaman normal tumpukan juga dapat diaktifkan untuk proses tunggal.

Menggunakan GFlags dengan sistem-lebar halaman tumpukan

The GFlags alat yang digunakan untuk mengaktifkan sistem-lebar halaman tumpukan. Dalam rangka untuk GFlags perintah untuk mengambil efek, Anda harus me-restart komputer Anda setelah Anda mengeluarkan perintah.

Untuk mengaktifkan sistem-lebar halaman normal tumpukan:
  1. Ketik berikut pada baris perintah:gflags - r + hpa

  2. Mulai ulang komputer Anda.
Untuk menonaktifkan sistem-lebar halaman normal tumpukan:
  1. Ketik berikut pada baris perintah:gflags - r - hpa

  2. Mulai ulang komputer Anda.
Catatan Pengaturan GFlags tidak ada yang lain berguna ketika Anda mengaktifkan halaman tumpukan. Jika pengaturan lain yang muncul berkaitan dengan tumpukan diaktifkan, maka halaman tumpukan bug dapat memperkenalkan konflik antara halaman tumpukan manajer dan ini "tidak berbahaya" tumpukan bendera.

Menggunakan GFlags dengan tumpukan halaman proses tunggal

Anda dapat mengaktifkan tumpukan halaman untuk memantau satu proses tertentu. Untuk melakukan ini, ikuti langkah berikut:
  1. Pada prompt perintah, mengubah direktori di mana Anda menginstal debug alat-alat.
  2. Pada prompt perintah, ketik berikut, dan kemudian tekan MASUKKAN:
    Gflags.exe/p /enableLSASS.exe
    Catatan LSASS.exe singkatan nama proses bahwa Anda ingin monitor dengan alat Pageheap.
  3. Ketika Anda tidak lagi memerlukan halaman tumpukan pemantauan, menonaktifkan pemantauan. Untuk melakukannya, ketik berikut ini pada prompt perintah, dan kemudian tekan MASUKKAN:
    Gflags.exe/p /disable LSASS.exe
    Catatan LSASS.exe singkatan nama proses bahwa Anda ingin monitor dengan alat Pageheap.
  4. Untuk daftar semua program yang saat ini memiliki Pageheap Verifikasi diaktifkan, ketik berikut ini pada prompt perintah, dan kemudian Tekan MASUKKAN:
    Gflags.exe/p

Alokasi unaligned

Windows tumpukan manajer (semua versi) telah selalu dijamin Alokasi tumpukan memiliki alamat awal yang 8-byte blok (pada 64-bit platform ini adalah 16-byte). Halaman manajer tumpukan membuat jaminan yang sama. Ini tidak mungkin, namun, jika Anda ingin memiliki akhir-of-the-alokasi tepat pada akhir halaman. Halaman yang tepat akhir-of- Alokasi diperlukan sehingga kesalahan dari oleh-satu-byte akan memicu baca atau menulis ke halaman tidak dapat diakses dan menyebabkan kesalahan segera.

Jika ukuran meminta pengguna untuk blok adalah tidak 8-byte blok, kemudian halaman tumpukan tidak dapat memenuhi "mulai alamat 8-byte blok" dan "alamat halaman akhir selaras"kendala. Solusinya adalah untuk bertemu pertama kendala dan membuat mulai dari 8-byte blok selaras. Kemudian menggunakan pola mengisi kecil antara akhir blok dan mulai halaman tidak dapat diakses. Ini mengisi pola dapat dari 0 bytes melalui 7 byte panjangnya pada arsitektur 32-bit. Mengisi pola diperiksa atas gratis.

Jika kesalahan segera deteksi diperlukan untuk ini alokasi yang jika tidak akan memiliki pola mengisi pada akhir, membuat Halaman manajer tumpukan mengabaikan aturan 8-byte kesejajaran, dan selalu menyelaraskan akhir alokasi pada batas halaman dengan menggunakan / unaligned dan / full parameter. Untuk informasi lebih lanjut, lihat / unaligned parameter.

CATATAN: Beberapa program membuat asumsi tentang 8-byte keselarasan dan mereka berhenti bekerja dengan benar dengan / unaligned parameter. Microsoft Internet Explorer adalah salah satu program tersebut.

Halaman tidak terikat untuk halaman penuh tumpukan alokasi

Pelaksanaan halaman penuh tumpukan inti melakukan dua halaman untuk setiap Alokasi lebih kecil dari satu halaman. Satu halaman yang digunakan untuk pengguna alokasi, dan yang lain adalah diakses non-pada akhir buffer.

Akhir penyangga overruns dapat dideteksi dengan menggunakan zona reserved virtual ruang, bukannya halaman berkomitmen tidak dapat diakses. Pelanggaran akses pengecualian terjadi ketika proses menyentuh ruang virtual yang disediakan. Ini pendekatan dapat mengurangi pemakaian memori hingga 50 persen. Untuk lebih informasi, lihat / decommit parameter.

Kesalahan injeksi

Anda dapat mengontrol halaman tumpukan manajer sehingga beberapa alokasi sengaja gagal. Hal ini berguna dalam mensimulasikan kondisi memori rendah tanpa benar-benar menggunakan semua sumber daya sistem.

Menentukan nomor dari 1 hingga 10.000 untuk mewakili probabilitas bahwa alokasi akan gagal. Menggunakan probabilitas dari 10.000 memastikan bahwa 100 persen dari alokasi akan gagal. A probabilitas 2.000 menentukan bahwa sekitar 20 persen dari alokasi akan gagal.

Halaman tumpukan manajer perlu perawatan khusus untuk menghindari kesalahan injeksi di kedua pertama 5 detik proses kehidupan, dan Windows NT loader kode jalan (untuk exampole, LoadLibrary, FreeLibrary). Jika 5 detik tidak cukup untuk memungkinkan Anda proses startup lengkap, maka Anda dapat menentukan timeout lagi pada awal proses. Untuk informasi lebih lanjut, lihat /fault parameter.

Ketika Anda menggunakan /fault parameter dan proses yang sedang diuji memiliki bug, pengecualian akan dibangkitkan. Secara umum, alasan untuk ini adalah bahwa operasi allocate kembali NULL, dan aplikasi kemudian mencoba untuk mengakses dialokasikan memori. Karena allocate gagal, namun, memori tidak dapat diakses, dan karena itu terjadi pelanggaran akses.

Alasan lain bahwa pengecualian adalah mengangkat adalah bahwa aplikasi mencoba untuk berurusan dengan alokasi kegagalan, tetapi tidak akan melepaskan beberapa sumber. Ini menyatakan kebocoran memori dan lebih sulit untuk debug.

Untuk membantu mendiagnosa ini kegagalan, manajer tumpukan halaman membuat sejarah tumpukan jejak dari saat kesalahan injeksi. Jejak ini dapat ditampilkan dengan debugger berikut perintah:

! tumpukan -p -f [nomor dari jejak]

Secara default ekstensi akan menampilkan hanya terakhir empat jejak.

Secara otomatis melampirkan Debugger ketika aplikasi mulai

Beberapa aplikasi sulit untuk memulai dari prompt perintah, atau mereka melahirkan dari proses lainnya. Untuk aplikasi ini, menentukan bahwa, setiap kali mereka mulai, debugger akan secara otomatis akan melekat pada mereka. Hal ini bermanfaat jika halaman tumpukan diaktifkan untuk itu proses dan tumpukan kegagalan terjadi. Untuk informasi lebih lanjut, lihat /debug parameter.

Pageheap.exe efektif ketika digunakan untuk memverifikasi proses alokasi memori, termasuk C++ gaya alokasi baru dan menghapus, selama fungsi kustom alokasi/gratis akhirnya panggilan ke NT tumpukan manajemen antarmuka (yaitu, RtlAllocateHeap, RtlFreeHeap). The fungsi-fungsi berikut dijamin untuk melakukannya:
  • Fungsi seperti HeapAlloc, HeapFree, HeapReAlloc: Fungsi ini diekspor oleh kernel32.dll dan panggilan langsung ke antarmuka tumpukan NT. Fungsi seperti GlobalAlloc, GlobalFree, GlobalReAlloc: Fungsi ini diekspor oleh kernel32.dll dan panggilan baik langsung atau tidak langsung ke NT tumpukan antarmuka.
  • Fungsi seperti LocalAlloc, LocalFree, LocalReAlloc: Fungsi ini diekspor oleh kernel32.dll dan panggilan baik langsung atau tidak langsung ke NT tumpukan antarmuka.
  • Fungsi malloc, gratis, realloc, msize, memperluas: Fungsi ini diekspor oleh msvcrt.dll dan panggilan baik langsung atau tidak langsung ke tumpukan NT. Hal ini tidak selalu terjadi. C run-time digunakan untuk memiliki tumpukan berbeda implementasi, tapi c saat ini run-time panggilan langsung ke tumpukan NT.
  • Operator baru, Hapus, [baru] , Hapus] : Fungsi ini diekspor oleh msvcrt.dll dan panggilan baik langsung atau tidak langsung ke tumpukan NT.
Setiap lain alokasi/gratis set fungsi mungkin adalah custom skema dan tidak dijamin untuk memanggil baik secara langsung maupun tidak langsung ke NT tumpukan. Hanya sumber kode inspeksi atau berjalan di bawah debugger dapat mengungkapkan pelaksanaannya.

Hindari menggunakan menghubungkan statis. Beberapa aplikasi telah statis terkait dengan lama versi c runtime. Lama ini Versi tidak memanggil Windows NT tumpukan api, dan Pageheap.exe tidak dapat digunakan untuk Verifikasi alokasi ini. Proses dynamic linking memastikan bahwa Anda mendapatkan c terbaru pustaka runtime (msvcrt.dll).

Kelas bug yang ditemukan oleh Pageheap.exe

Pageheap.exe mendeteksi sebagian besar berhubungan dengan tumpukan bug; Namun, fokus pada masalah korupsi tumpukan dan tidak berfokus pada kebocoran. Pageheap.exe telah kesuksesan terbatas dengan menemukan tumpukan kebocoran, meskipun memiliki fungsi untuk target ini.

Salah satu keuntungan dari Pageheap.exe bahwa banyak kesalahan terdeteksi ketika mereka terjadi. Sebagai contoh, off-oleh-satu-byte error akhir penyangga dialokasikan secara dinamis mungkin menyebabkan akses pelanggaran. Ada beberapa jenis kesalahan yang tidak dapat dideteksi ketika mereka terjadi. Dalam kasus tersebut, laporan kesalahan tertunda hingga blok dibebaskan.
  • Tidak sah tumpukan penunjuk: Antarmuka tingkat tumpukan semua Win32 dan Windows NT mengambil sebagai pertama parameter pointer ke tumpukan di mana operasi harus terjadi. Halaman tumpukan manajer mendeteksi tidak sah tumpukan pointer saat panggilan dibuat.
  • Tidak sah tumpukan blok penunjuk: Setelah blok dialokasikan, dapat digunakan sebagai parameter untuk beberapa tumpukan antarmuka, terutama kelas free() antarmuka. Tumpukan Halaman manajer segera mendeteksi tidak sah tumpukan blok pointer. Lihat halaman Debugging Tumpukan kegagalan untuk cara untuk menentukan apakah alamat yang tidak valid beberapa byte atau benar-benar salah.
  • Multithreaded unsynchronized akses ke tumpukan: Aplikasi beberapa panggilan ke tumpukan dari beberapa benang. Ini jenis skenario memerlukan pengaturan bendera (oleh pengguna) yang akan memicu untuk mendapatkan kunci tumpukan. Manajer tumpukan halaman akan mendeteksi jenis pelanggaran ketika dua thread mencoba untuk memanggil secara bersamaan ke tumpukan.
  • Asumsi tentang realokasi blok di alamat yang sama: Operasi realokasi tidak dijamin untuk kembali sama alamat. Hal ini terutama benar ketika realokasi mengurangi ukuran blok. Beberapa aplikasi menganggap bahwa realokasi akan kembali alamat yang sama. Halaman manajer tumpukan selalu mengalokasikan blok baru selama realokasi dan membebaskan blok tua. Blok gratis dilindungi untuk akses baca/tulis, dan oleh karena itu setiap akses untuk itu akan meningkatkan pelanggaran akses.
  • Ganda gratis: Bug ini, di mana tumpukan blok yang sama dibebaskan beberapa kali, adalah umum di beberapa aplikasi. Ini segera terdeteksi oleh tumpukan Halaman manajer karena, pada kedua gratis, blok tidak akan memiliki awalan tepat header dan tidak dapat ditemukan di antara blok dialokasikan. Melihat tumpukan halaman Debugging Kegagalan untuk cara untuk menganalisis setumpuk jejak gratis operasi pertama. Ini kesalahan dapat varian realokasi masalah karena, ketika aplikasi membebaskan apa yang dianggapnya itu adalah alamat blok, blok adalah sudah dibebaskan sebagai bagian dari realokasi.
  • Akses dari blok setelah gratis: Blok membebaskan memori yang disimpan untuk waktu yang singkat oleh tumpukan Halaman manajer di kolam dari memori yang dilindungi. Setiap akses ke blok tersebut akan meningkatkan pelanggaran akses. Berdasarkan prinsip "wilayah", sebagian besar masalah harus ditangkap jika gratis kolam renang-dilindungi cukup besar. Jika blok dibebaskan adalah masih di kolam renang-dilindungi, bug tertangkap langsung. Namun, jika memori digunakan kembali, maka ada kurang kemungkinan menemukan bug atau mengidentifikasi kode yang menyebabkannya.
  • Akses setelah akhir blok dialokasikan: Tempat manajer tumpukan halaman halaman tidak dapat diakses segera Setelah blok dialokasikan. Setiap akses melewati akhir blok akan meningkatkan pelanggaran akses. Beberapa aplikasi berharap alokasi menjadi 8-byte blok. Fitur ini telah didukung sejak Windows NT 3.5 tumpukan manajer. Permintaan ukuran yang tidak 8-byte blok akan tetap mendapatkan alamat selaras 8-byte, tetapi Hal ini membuat beberapa byte setelah akhir blok yang masih dapat diakses. Jika aplikasi merusak hanya orang-orang beberapa byte, maka kesalahan akan ditangkap hanya dengan memeriksa blok akhiran pola ketika blok dibebaskan.
  • Akses sebelum blok dialokasikan: Manajer tumpukan halaman dapat diperintahkan melalui settable bendera untuk menempatkan halaman tidak dapat diakses pada awal blok, bukan pada Akhir. Setiap akses sebelum awal blok akan meningkatkan akses pelanggaran.
Perkecil tabel iniPerbesar tabel ini
KegagalanHalaman normal tumpukanHalaman penuh tumpukan
Tidak sah tumpukan penunjukTertangkap langsungTertangkap langsung
Tidak sah tumpukan blok penunjukTertangkap langsungTertangkap langsung
Akses unsynchronizedTertangkap langsungTertangkap langsung
Asumsi tentang realokasi alamat90% sampai real gratis90% menangkap langsung
Ganda gratis90% menangkap langsung90% tertangkap langsung
Menggunakan kembali setelah gratis90% sampai benar-benar gratis90 % tertangkap langsung
Akses setelah akhir blokTertangkap pada gratisTertangkap langsung
Akses sebelum awal blokTertangkap pada gratisTertangkap langsung (khusus bendera)

Debugging halaman tumpukan kegagalan

Untuk informasi lebih lanjut tentang Debugging halaman tumpukan kegagalan, silahkan lihat pada Kompatibilitas aplikasi Tookit referensi tersedia dalam Application Compatibility Toolkit.

Untuk Sintaks dari Pageheap.exe dan contoh menggunakan Pageheap.exe, silakan melihat Kompatibilitas aplikasi Tookit referensi tersedia dalam Application Compatibility Toolkit.

Untuk informasi lebih lanjut silakan lihat berikut Artikel Basis Pengetahuan Microsoft:
294895 Cara mendapatkan alat kompatibilitas aplikasi Windows

Properti

ID Artikel: 286470 - Kajian Terakhir: 23 September 2011 - Revisi: 2.0
Berlaku bagi:
  • 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
Kata kunci: 
kbenv kbinfo kbmt KB286470 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:286470

Berikan Masukan

 

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