ID Artikel: 268343 - Kajian Terakhir: 22 September 2011 - Revisi: 2.0 Umdhtools.exe: Bagaimana menggunakan Umdh.exe untuk menemukan kebocoran memori
Pada Halaman iniRINGKASAN Utilitas tumpukan (UMDH) dump mode pengguna bekerja dengan
sistem operasi untuk menganalisis Windows tumpukan alokasi untuk proses tertentu.
Utilitas ini, dan alat-alat lain yang terkait dengan itu, terutama ditargetkan
untuk Windows 2000 dan Windows XP. Klik Bermain tombol untuk melihat demonstrasi media streaming ini. Catatan Video dikodekan dengan codec ACELP ®, Anda perlu menginstal codec ACELP ® gratis yang tersedia di http://www.acelp.net/acelp_eval.php (http://www.acelp.net/acelp_eval.php) Catatan Karena malloc fungsi dalam modul c run-time (CRT) menggunakan bingkai pointer kelalaian (FPO) pada versi peluncuran asli dari Windows Server 2003, Anda mungkin tidak melihat informasi stack lengkap malloc fungsi dengan menggunakan alat UMDH. Masalah ini telah diperbaiki dalam modul CRT Windows Server 2003 Paket Layanan 1 (SP1). Oleh karena itu, Anda dapat melihat informasi stack lengkap dari fungsi malloc di Windows Server 2003 SP1. INFORMASI LEBIH LANJUTSebelum Anda menggunakan UMDHJika Anda berpikir bahwa Anda mengalami kebocoran memori, Sadarilah bahwa memori kebocoran mungkin tidak apa yang mereka tampaknya. Anda mungkin menemukan bahwa kebocoran memori tidak kebocoran memori benar, tetapi peningkatan kinerja. Untuk contoh, Microsoft Jet database engine dapat mengkonsumsi jumlah besar memori (hingga 128 MB pada komputer 256 MB) karena akan mengambil data dan menulis cache. Cache memungkinkan mesin Jet untuk mendapatkan cepat membaca-depan dan menulis-depan buffer.Untuk menentukan apakah sebuah proses mengalami memori kebocoran, menggunakan Monitor kinerja Windows (Perfmon.exe) dan memantau swasta Byte di bawah kategori proses untuk aplikasi Anda. Byte swasta adalah jumlah memori bahwa proses telah dialokasikan, tetapi tidak berbagi dengan lainnya proses. Catatan bahwa ini berbeda dari Virtual byte, yang juga menarik untuk memantau. Virtual byte adalah ukuran saat ini dalam byte ruang alamat virtual yang menggunakan proses. Aplikasi dapat bocor virtual memori, tetapi mungkin tidak melihat perbedaan dalam byte swasta yang dialokasikan. Jika Anda tidak melihat memori meningkatkan ketika Anda memantau byte swasta, tetapi Anda menduga bahwa Anda masih kehabisan memori, monitor virtual byte untuk melihat Jika Anda menggunakan sampai memori virtual. Untuk informasi tambahan tentang mendeteksi kebocoran memori dan ikhtisar Monitor kinerja Windows (Perfmon.exe), kunjungi Web site Microsoft berikut: http://MSDN.Microsoft.com/en-us/library/ms404355.aspx
(http://msdn.microsoft.com/en-us/library/ms404355.aspx)
Untuk memastikan bahwa aplikasi Anda bocor memori, meletakkan
menduga kode dalam lingkaran dengan banyak pengulangan, dan kemudian memantau pribadi dan
Virtual byte untuk setiap meningkatkan memori. Menonton untuk memastikan bahwa nomor
byte swasta dan virtual byte tidak akhirnya tetap sama dan
nomor berhenti meningkatkan. Jika ada titik di mana memori berhenti
meningkat, (misalnya, itu tidak terus mendaki tanpa batas) Anda lakukan
tidak melihat kebocoran memori tapi lebih mungkin, Anda melihat cache yang sedang berkembang untuk yang
ukuran maksimum.Jika Anda menentukan bahwa Anda melihat kebocoran memori, sebelum Anda menggunakan UMDH, ikuti langkah berikut:
http://www.Microsoft.com/whdc/DevTools/DDK/default.mspx
(http://www.microsoft.com/whdc/devtools/ddk/default.mspx)
Men-download dan menginstal utilitas, dan kemudian menetapkan sistem jalan
variabel lingkungan untuk jalan di mana alat debugging diinstal. Sebelum Anda menggunakan UMDH, Anda harus menginstal simbol debug benar untuk komponen-komponen dari aplikasi Anda dan sistem operasi Anda. Menggunakan Microsoft Server simbol untuk memperoleh debug simbol untuk Microsoft komponen. Untuk informasi lebih lanjut tentang Server Simbol Microsoft, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft: 311503
(http://support.microsoft.com/kb/311503/
)
Gunakan Server Simbol Microsoft untuk mendapatkan berkas simbol debug UMDH mencoba untuk menemukan berkas simbol dengan menggunakan
Variabel lingkungan _NT_SYMBOL_PATH. Perintah untuk menetapkan lintasan dari
prompt perintah mungkin terlihat mirip dengan berikut ini: menetapkan _NT_SYMBOL_PATH = SRV * c:\LocalSymbolCache Untuk informasi tambahan tentang pengaturan simbolis debugging
informasi, lihat bagian "Debug simbol" nanti dalam artikel ini.Setelah Anda menyelesaikan langkah ini, Anda sudah siap untuk menggunakan utilitas UMDH. Menangkap tumpukan kesedihan dengan UMDHUMDH adalah sebuah utilitas yang informasi tentang tumpukan alokasi dari proses. Informasi ini mencakup callstack untuk masing-masing alokasi, jumlah alokasi yang dibuat melalui callstack itu, dan jumlah byte yang dikonsumsi melalui callstack itu. Misalnya:Untuk menghasilkan berkas dump tumpukan alokasi, Anda harus menggunakan utilitas Gflags.exe, yang juga termasuk dengan produk Debugging alat untuk Windows, membiarkan sistem operasi yang tahu bahwa Anda ingin kernel untuk melacak alokasi. Anggap yang Anda inginkan untuk membuang heap(s) isi untuk Notepad.exe. Pertama Anda harus mengaktifkan setumpuk jejak Akuisisi untuk aplikasi yang ingin Anda tes. Secara default, fitur ini tidak diaktifkan. Perintah untuk mengaktifkan fitur ini adalah sebagai berikut: gflags -i notepad.exe + ust Perintah tidak mengaktifkan Pelacakan stack untuk proses yang
sudah berjalan, tetapi memungkinkan Pelacakan stack untuk semua masa depan eksekusi dari
Notepad.exe. atau, Anda dapat mengatur bendera melalui pengguna GFLAGS
antarmuka (menjalankan Gflags.exe tanpa argumen untuk mendapatkan antarmuka pengguna). Penggunaan
The -ust pilihan untuk gflags untuk menonaktifkan tumpukan menelusuri ketika Anda
selesai debugging. Ketika Anda mengatur bendera gambar melalui Gflags.exe, dan Anda mengatur simbol debug, Anda siap untuk memulai Notepad ( aplikasi yang menggunakan UMDH). Setelah program dimulai, Anda harus menentukan proses ID (PID) dari proses Notepad yang baru saja mulai. Perintah untuk ini adalah sebagai berikut: tlist Anda dapat menemukan PID dari output dari aplikasi TLIST.
Informasi PID juga dapat diperoleh dari pengelola tugas. Menganggap PID untuk
proses Notepad yang Anda baru saja mulai adalah 124. Anda dapat menggunakan UMDH untuk mendapatkan
tumpukan dump dengan perintah berikut: umdh - p: 124 - f:notepad124.log Hasil: Anda memiliki tumpukan lengkap dump dari proses Notepad
Notepad124.log file. File ini menunjukkan semua alokasi yang dibuat dan
callstacks di mana alokasi dibuat. Menggunakan Umdh.exe untuk membandingkan UMDH logSementara UMDH log file berisi informasi berharga tentang keadaan saat ini tumpukan untuk proses, jika Anda prihatin dengan mencari kebocoran memori, mungkin lebih berharga untuk membandingkan keluaran dari dua log dan Cari tahu apa callstack telah melihat pertumbuhan terbesar antara berkas dump dua. Utilitas Umdh.exe membantu membandingkan dua UMDH log untuk menyediakan analisis perbedaan antara mereka. Setelah Anda memiliki dua log ditangkap pada berbeda interval, Anda dapat menggunakan perintah berikut:UMDH dh1.log dh2.log mengatakan cmp12.txt -atau- UMDH -d dh1.log dh2.log mengatakan cmp12.txt The -d opsi baris perintah memberitahu UMDH akan ditampilkan dalam desimal bukan
heksadesimal. Output perintah membandingkan perbedaan
Alokasi antara dua log dan memberikan informasi yang sama dengan
Berikut ini: + 5320 (f110 - 9df0) 3a allocs BackTrace00053
Total peningkatan == 5320 Untuk setiap BackTrace dalam file log UMDH, ada perbandingan
dibuat antara dua log file. Hal ini menunjukkan bahwa berkas log terakhir yang
ditetapkan dalam UMDH baris perintah telah 0xF110 byte dialokasikan sementara pertama
login baris perintah UMDH telah 0x9DF0 byte dialokasikan untuk BackTrace sama
(callstack). "5320" Adalah perbedaan dalam jumlah byte yang dialokasikan. Dalam
Hal ini, ada 0x5320 yang lebih byte dialokasikan antara zaman yang
log dua ditangkap. Byte berasal dari callstack yang diidentifikasi oleh
"BackTrace00053". Langkah berikutnya adalah untuk mengetahui apa yang backtrace. Jika Anda membuka kedua file log dan mencari BackTrace00053, Anda mungkin menemukan sesuatu yang mirip dengan berikut: Memungkinkan Stack jejakInformasi yang paling penting dalam UMDH log adalah bekas tumpukan dari alokasi tumpukan. Anda dapat menganalisis mereka untuk memverifikasi jika proses kebocoran tumpukan memori. Secara default, jejak tumpukan ini tidak diperoleh. Anda dapat mengaktifkan ini fitur per proses atau seluruh sistem. Gunakan perintah berikut untuk mengaktifkan tumpukan menelusuri seluruh sistem:gflags - r + ust Me-restart komputer setelah perintah ini. Untuk setiap proses
memungkinkan, perintah adalah sebagai berikut: gflags -i APPNAME + ust Di mana APPNAME nama file executable termasuk ekstensi (untuk
contoh, Services.exe, Lsass.exe). Perintah tidak mengaktifkan Pelacakan stack
untuk proses yang sudah berjalan. Oleh karena itu, untuk proses yang Anda tidak dapat
restart (untuk contoh, layanan, lsass, winlogon), Anda harus me-restart tes Anda
komputer. Gunakan perintah berikut untuk memverifikasi apa yang memiliki pengaturan telah mengatur sistem atau untuk proses tertentu: sistem: gflags - r Proses tertentu: gflags -i nama APP Secara default, kedalaman maksimum stack trace adalah 16. Jika Anda ingin
melihat lebih dalam callstacks, Anda dapat meningkatkan ini dengan menjalankan GFLAGS. Klik untuk memilih Sistem Registry, kemudian ketik kedalaman baru di Max. Stack Trace menangkap kedalaman mengedit kontrol. Klik Menerapkan, dan kemudian restart komputer. PENTING: Jika Anda menggunakan Windows NT 4.0 Service Pack 6, Anda harus menggunakan Umdh_nt4.exe, Umdh.exe, dan Anda harus menggunakan gflags -r perintah untuk mengatur tumpukan sistem pelacakan. Pastikan bahwa Anda restart komputer Anda. Pelacakan stack Umdh_nt4 tidak bekerja pada setiap proses dasar pada Windows NT versi 4. Itu harus ditetapkan untuk seluruh sistem. Debug simbolSalah satu langkah yang paling penting untuk menggunakan UMDH adalah untuk memastikan bahwa Anda memiliki simbol baik file (file .dbg atau .pdb) untuk mendapatkan baik setumpuk jejak. Minimal, Anda perlu berkas simbol Kernel32.dbg dan Ntdll.dbg. Kamu bisa memperoleh tambahan simbol debugging yang mungkin seperti Anda mengetahui lebih lanjut tentang yang komponen kebocoran memori. Untuk informasi lebih lanjut tentang cara mendapatkan berkas simbol debug untuk Microsoft komponen, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:311503
(http://support.microsoft.com/kb/311503/
)
Gunakan Server Simbol Microsoft untuk mendapatkan berkas simbol debug Untuk informasi tambahan tentang cara menggunakan
Server Simbol Microsoft dan cara mendapatkan Windows simbol paket, kunjungi
Web site Microsoft berikut: http://www.Microsoft.com/whdc/DevTools/DDK/default.mspx
(http://www.microsoft.com/whdc/devtools/ddk/default.mspx)
Ketika Anda membangun komponen dengan Visual C++, sangat penting bahwa
Anda tidak memiliki Program Database untuk mengedit dan Lanjutkan dipilih untuk c ++
opsi kompiler. Sebaliknya, pilih Program Database. Untuk menetapkan lintasan simbol,
Inisialisasi variabel lingkungan _NT_SYMBOL_PATH untuk jalur untuk digunakan. Anda
dapat menggunakan Server Simbol Microsoft untuk mendapatkan simbol untuk Microsoft
komponen. 311503
(http://support.microsoft.com/kb/311503/
)
Gunakan Server Simbol Microsoft untuk mendapatkan berkas simbol debug Ikuti langkah-langkah ini untuk mengatur _NT_SYMBOL_PATH
variabel lingkungan:
CATATAN: Juga termasuk path ke PDBs untuk komponen Anda aplikasi. Misalnya, menetapkan lintasan untuk _NT_SYMBOL_PATH sebagai berikut: SRV*c:\symbols*http://msdl.Microsoft.com/download/symbols;c:\myapplicationssymbols Bagian pertama dari jalan ini menunjuk ke Server Simbol Microsoft
dan Serikat bahwa simbol-simbol yang digunakan akan di-download di c:\symbols
folder. Bagian yang mengikuti semi-kolon adalah path ke file PDB
(simbol file) khusus untuk aplikasi bocor. Menerapkan UMDHParameter baris perintah yang diperlukan hanya untuk UMDH -p pilihan, yang menentukan PID dari proses yang tumpukan dump akan diperoleh. PID dapat diperoleh dengan menggunakan Task Manager atau Tlist.exe program. Untuk perintah yang mirip dengan berikut, log akan dibuang output standar:umdh - p: PID UMDH juga menampilkan berbagai informasi pesan standar
kesalahan, dan oleh karena itu jika Anda tidak mengalihkan itu, itu dicampur dengan log nyata.
Untuk mengumpulkan UMDH informasi pesan dalam file, gunakan perintah berikut: umdh - p: PID 2>umdh.msg Jika Anda ingin mengumpulkan log yang dibuang oleh UMDH dalam file,
Gunakan salah satu dari perintah berikut: umdh - p: PID mengatakan umdh.log -atau- umdh - p: PID-f:umdh.log Ini perintah setara. Log standar yang Diperoleh dengan UMDH berisi penghitungan tumpukan konsumen yang diurutkan menurut Alokasi menghitung. Jika, untuk keperluan debugging, Anda juga perlu berkas dump dari semua blok dialokasikan dengan jejak-jejak tumpukan sesuai mereka, -d pilihan dapat digunakan: umdh - p: PID -d Jika Anda menggunakan perintah ini, Anda mungkin melihat berikut dalam UMDH
log file: Alokasi untuk jejak BackTrace00046: 005F69A0
005F6150 Jika log berisi terlalu banyak informasi, dapat dibatasi hanya untuk pengguna besar yang memiliki alokasi menghitung di atas ambang batas tertentu. Penggunaan perintah berikut: umdh - p: PID - t: AMBANG Semua opsi baris perintah (misalnya, -p, -f, -t, -d) dapat ditentukan secara bersamaan dalam urutan apapun. Berikut adalah
contoh baris perintah yang lebih sulit: umdh - p: 123 - t: 1000 - f:umdh.log -d Perintah ini dump tumpukan untuk proses dengan PID 123 ke
berkas Umdh.log. Hanya tumpukan jejak dump account untuk lebih dari 1000
alokasi dan juga dump alamat tumpukan blok yang
dialokasikan melalui setiap setumpuk jejak. Lain berguna UMDH pilihan The -l pilihan. Hal ini menyebabkan file dan baris nomor yang akan dicetak dalam callstack bila memungkinkan. UMDH Output dijelaskanJika Anda dialihkan log untuk (file)umdh - p: PID-f:umdh.log), isi mirip dengan berikut ini, yang diperoleh dari menjalankan Notepad proses:Masalah yang Anda dapat mengalami ketika Anda menggunakan UMDHKesalahan yang paling umum ketika Anda menggunakan UMDH terjadi karena tumpukan kalkir tidak diaktifkan. Juga, salah simbol untuk Ntdll.dll mencegah UMDH dari berjalan. Untuk berkas simbol lain, UMDH berjalan tetapi log file berisi tumpukan jejak-jejak yang tidak memiliki nama-nama fungsi tetapi sebaliknya memiliki relatif alamat di dalam modul. Kesalahan ketiga jauh adalah menentukan PID salah. Berikut hasil pesan galat ketika Anda mencoba untuk menjalankan UMDH untuk proses yang tidak memiliki Pelacakan stack diaktifkan: C:\>umdh - p: 1140 UMDH: Logtime
2000-06-28 12: 43 - Mesin = MyMachine - PID = 1140 menghubungkan.....Modul
Pencacahan lengkap. SymGetSymFromName (proses, ntdll!RtlpStackTraceDataBase,
XXX) gagal, LastError = 126 UmdhGetAddrFromName tidak bisa menemukan Stack Trace DB
penunjuk (ntdll!RtlpStackTraceDataBase). NTDLL.dll simbol tidak benar; Kami
harus mampu melihat non-impor simbol. gflags -i APPNAME Gunakan perintah berikut ketika Anda bergantung pada sistem-lebar tumpukan
kalkir: gflags - r Perintah ini menunjukkan daftar bendera yang ditetapkan untuk aplikasi.
Perhatikan bahwa dalam kasus dari tumpukan sistem pelacakan, fitur mungkin muncul sebagai
aktif tetapi jika Anda tidak restart komputer setelah berjalan gflags - r + ust perintah, tidak benar-benar diaktifkan. Jika Anda ingin tahu setiap
aplikasi yang memiliki tumpukan kalkir diaktifkan, Anda dapat melihat kunci USTEnabled
di bawah tombol registri berikut: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File
Eksekusi pilihan Jika Anda menjalankan UMDH pada proses yang memiliki tumpukan kalkir diaktifkan, tetapi
Anda tidak memiliki ulang aplikasi karena Anda mengatur bendera, Anda akan menerima
pesan berikut di log Anda: Setumpuk jejak adalah
tidak disimpan untuk alokasi ini (indeks == 0) ntsd notepad Kemudian, dari konsol debugger, jalankan LD perintah untuk memuat informasi simbol untuk modul dan LM perintah untuk daftar modul apa ada simbol-simbol mereka dimuat. Jika
output dari LM perintah menunjukkan simbol ekspor dimuat, simbol-simbol tidak baik. Jika
Anda memiliki PDB simbol dimuat, simbol-simbol baik. Anda akan menerima
pesan galat berikut jika Anda tentukan PID salah: C:\>umdh - p: 1000 UMDH: Logtime 2000-06-28 09: 45 - mesin = MyMachine -
PID = 1000 menghubungkan... OpenProcess gagal, LastError = 0x57 Panggilan UMDH dari Visual BasicMungkin berguna kadang-kadang untuk membuang sejumlah log dari waktu ke waktu karena kebocoran mungkin tidak akan sangat terlihat pada awalnya. Sebagai contoh, jika Anda menduga bahwa aplikasi Web Active Server Pages (ASP) bocor memori, mungkin akan membantu untuk menulis COM komponen dalam Visual Basic yang peluru keluar untuk UMDH. Anda kemudian dapat menghubungi komponen dari halaman ASP.The Berikut adalah beberapa kode Visual Basic yang memanggil UMDH dan menciptakan sebuah file log yang didasarkan pada waktu saat ini: Menggunakan UMDH dengan Windows NT 4.0 Paket Layanan 6a (SP6a)UMDH utilitas yang disertakan dengan alat Debugging untuk Produk Windows tidak bekerja pada Windows NT 4.0. Berkas executable (Umdhnt4tools.exe) disertakan dengan artikel ini dan berisi berikut alat untuk digunakan dengan NT 4.0:
Perkecil gambar ini ![]() Untuk informasi selengkapnya tentang cara mengunduh berkas dukungan Microsoft, klik nomor artikel berikut ini untuk melihat artikel di Pangkalan Pengetahuan Microsoft: 119591
(http://support.microsoft.com/kb/119591/
)
Cara mendapatkan berkas dukungan Microsoft dari layanan daring Microsoft telah memindai berkas ini dari virus. Microsoft menggunakan perangkat lunak pendeteksi virus terbaru yang tersedia pada tanggal saat berkas dikirimkan. Berkas tersebut disimpan di server aman, yang membantu mencegah segala perubahan tidak sah terhadap berkas. Meletakkan Umdh_nt4.exe dan Dbghelp.dll di folder, dan kemudian
menempatkan mereka pertama dalam PATH variabel lingkungan. Menggunakan Umdh_nt4.exe bukan
UMDH. Pada komputer yang menjalankan Windows NT 4.0, Anda harus menggunakan Gflags.exe untuk mengatur tumpukan sistem pelacakan. Misalnya: gflags - r Pastikan Anda me-restart komputer Anda. Pelacakan stack Umdh_nt4
tidak bekerja secara per proses pada Windows NT versi 4.0. Sudah diatur untuk
seluruh sistem. UMDH_NT4 tidak seperti UMDH yang tidak membandingkan file-file log. Misalnya, Anda tidak dapat melakukan hal berikut: UMDH_NT4 dh1.log dh2.log mengatakan cmp12.txt Sebaliknya, Anda harus menggunakan utilitas Dhcmp.exe di dengan
Artikel ini. Perintah terlihat mirip dengan berikut ini: DHCMP dh1.log dh2.log mengatakan cmp12.txt Berlaku bagi:
Penerjemahan MesinPENTING: 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:268343
(http://support.microsoft.com/kb/268343/en-us/
)
| Sumber Lain Situs Pendukung Lain
KomunitasTerjemahan Artikel |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Kembali ke atas
