Umdhtools.exe: Bagaimana menggunakan Umdh.exe untuk menemukan kebocoran memori

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

Pada Halaman ini

RINGKASAN

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



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 LANJUT

Sebelum Anda menggunakan UMDH

Jika 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
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:
  1. Menginstal utilitas UMDH.
  2. Tetapkan variabel lingkungan sistem jalan untuk memasukkan Map di mana Anda menginstal UMDH.
  3. Tetapkan variabel lingkungan _NT_SYMBOL_PATH Microsoft simbol jalur server sehingga UMDH dapat mencari simbol debug file.
UMDH utilitas disertakan dengan alat Debugging untuk Windows produk pada Website Microsoft berikut:
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:
311503Gunakan 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 UMDH

UMDH 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:
00005320 bytes in 0x14 allocations (@ 0x00000428) by: BackTrace00053
           ntdll!RtlDebugAllocateHeap+0x000000FD
           ntdll!RtlAllocateHeapSlowly+0x0000005A
           ntdll!RtlAllocateHeap+0x00000808
           MyApp!_heap_alloc_base+0x00000069
           MyApp!_heap_alloc_dbg+0x000001A2
           MyApp!_nh_malloc_dbg+0x00000023
           MyApp!_nh_malloc+0x00000016
           MyApp!operator new+0x0000000E
           MyApp!LeakyFunc+0x0000001E
           MyApp!main+0x0000002C
           MyApp!mainCRTStartup+0x000000FC
           KERNEL32!BaseProcessStart+0x0000003D
				
Output UMDH ini menunjukkan bahwa ada 21280 (0x5320) byte dialokasikan total dari callstack. Byte 21280 dialokasikan dari 20 (0x14) memisahkan alokasi 1064 byte (0x428). Callstack diberikan pengenal dari BackTrace00053.

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 log

Sementara 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:
00005320 bytes in 0x14 allocations (@ 0x00000428) by: BackTrace00053
           ntdll!RtlDebugAllocateHeap+0x000000FD
           ntdll!RtlAllocateHeapSlowly+0x0000005A
           ntdll!RtlAllocateHeap+0x00000808
           MyApp!_heap_alloc_base+0x00000069
           MyApp!_heap_alloc_dbg+0x000001A2
           MyApp!_nh_malloc_dbg+0x00000023
           MyApp!_nh_malloc+0x00000016
           MyApp!operator new+0x0000000E
           MyApp!LeakyFunc+0x0000001E
           MyApp!main+0x0000002C
           MyApp!mainCRTStartup+0x000000FC
           KERNEL32!BaseProcessStart+0x0000003D
				
Ketika Anda melihat callstack, Anda dapat melihat bahwa LeakyFunc fungsi mengalokasikan memori melalui Visual c ++ runtime library operator baru fungsi. Jika Anda menemukan bahwa jumlah alokasi tumbuh sebagai Anda mengambil lebih banyak berkas dump, Anda dapat menyimpulkan bahwa memori adalah tidak dibebaskan.

Memungkinkan Stack jejak

Informasi 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 simbol

Salah 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:
311503Gunakan 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
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 Gunakan Server Simbol Microsoft untuk mendapatkan berkas simbol debug
Ikuti langkah-langkah ini untuk mengatur _NT_SYMBOL_PATH variabel lingkungan:
  1. Di Panel kontrol, klik dua kali Sistem.
  2. Klik Lanjutan tab, dan kemudian klik Variabel lingkungan.
Atau Anda dapat menetapkan variabel lingkungan _NT_SYMBOL_PATH di jendela perintah sebelum UMDH dijalankan.

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 UMDH

Parameter 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
Ini adalah alamat memori alokasi untuk itu callstack. Jika Anda debugger melekat proses, Anda dapat membuang isi memori di alamat ini untuk melihat apa yang telah dialokasikan.

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 dijelaskan

Jika Anda dialihkan log untuk (file)umdh - p: PID-f:umdh.log), isi mirip dengan berikut ini, yang diperoleh dari menjalankan Notepad proses:
UMDH: Logtime 2000-06-28 10:54 - Machine=MYMachine - PID=704
   *********** Heap 00270000 Information ********************
       Flags: 58000062
       Number Of Entries: 87
       Number Of Tags: <unknown>
       Bytes Allocated: 00008DF0
       Bytes Committed: 0000A000
       Total FreeSpace: 00001210
       Number of Virtual Address chunks used: 1
       Address Space Used: <unknown>
       Entry Overhead: 8
       Creator:  (Backtrace00007)
           ntdll!RtlDebugCreateHeap+0x00000196
           ntdll!RtlCreateHeap+0x0000023F
           ntdll!LdrpInitializeProcess+0x00000369
           ntdll!LdrpInitialize+0x0000028D
           ntdll!KiUserApcDispatcher+0x00000007
   *********** Heap 00270000 Hogs ********************
   000001A0 bytes in 0x4 allocations (@ 0x00000068) by: BackTrace00031
           ntdll!RtlDebugAllocateHeap+0x000000FB
           ntdll!RtlAllocateHeapSlowly+0x0000005B
           ntdll!RtlAllocateHeap+0x00000D81
           ntdll!LdrpAllocateDataTableEntry+0x00000039
           ntdll!LdrpMapDll+0x000002A4
           ntdll!LdrpLoadImportModule+0x0000010D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpLoadImportModule+0x0000011D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpLoadImportModule+0x0000011D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpInitializeProcess+0x000009DC
           ntdll!LdrpInitialize+0x0000028D
           ntdll!KiUserApcDispatcher+0x00000007

   000001A0 bytes in 0x4 allocations (@ 0x00000068) by: BackTrace00034
           ntdll!RtlDebugAllocateHeap+0x000000FB
           ntdll!RtlAllocateHeapSlowly+0x0000005B
           ntdll!RtlAllocateHeap+0x00000D81
           ntdll!LdrpAllocateDataTableEntry+0x00000039
           ntdll!LdrpMapDll+0x000002A4
           ntdll!LdrpLoadImportModule+0x0000010D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpLoadImportModule+0x0000011D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpLoadImportModule+0x0000011D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpLoadImportModule+0x0000011D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpInitializeProcess+0x000009DC
           ntdll!LdrpInitialize+0x0000028D
           ntdll!KiUserApcDispatcher+0x00000007
				
Log berisi dump setiap tumpukan dalam proses. Dalam contoh ini, log dimulai dengan tumpukan di alamat 270000. Setelah beberapa global counter untuk tumpukan, log berisi dump agar diurutkan menurun dari tumpukan jejak bertanggung jawab untuk sebagian besar alokasi. Ketika Anda membandingkan dinamika memori yang digunakan pada saat-saat yang berbeda, Anda dapat menyimpulkan apa yang terjadi di proses dan penggunaan tumpukan Apakah mirip dengan kebocoran.

Masalah yang Anda dapat mengalami ketika Anda menggunakan UMDH

Kesalahan 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.
Gunakan perintah berikut untuk Periksa pengaturan untuk proses yang Anda sedang menyelidiki:
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)
Jika Anda menjalankan tidak diatur benar jalur simbol atau simbol-simbol yang salah, dan Anda menjalankan UMDH, Anda mungkin menerima pesan galat dalam log. Namun, Anda mungkin hanya menerima salah atau menyesatkan callstacks. Untuk memverifikasi bahwa Anda memiliki simbol-simbol yang benar, mulai NTSD sistem debugger untuk proses, misalnya:
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 Basic

Mungkin 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:
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
      Public Function GetProcessID()
      GetProcessID = GetCurrentProcessId()
      End Function  
   .
   .
   .
      Dim strTime As String

      Dim sProcID As String
      sProcID = GetProcessID()
      strTime = "MYLOG_" & Format(Now(), "hhmm")
     
      Shell ("C:\UMDH\umdh -p:" & sProcID & " -f:d:\logs\" & strTime & ".txt")
				

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:
  • Umdh_nt4.exe dan Dbghelp.dll
    Ini adalah Windows NT 4.0 Versi SP6 utilitas UMDH.
  • Dhcmp.exe
    Utilitas ini digunakan untuk membandingkan dua UMDH dump untuk menentukan di mana memori mungkin bocor terjadi.
The berkas berikut ini tersedia untuk di-download dari Microsoft Download Pusat:
Perkecil gambar iniPerbesar gambar ini
Unduh
Download Umdhnt4tools.exe sekarang
Tanggal rilis: 28 Agustus 2002

Untuk informasi selengkapnya tentang cara mengunduh berkas dukungan Microsoft, klik nomor artikel berikut ini untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
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

Properti

ID Artikel: 268343 - Kajian Terakhir: 22 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows NT Server 4.0 Standard Edition
  • Microsoft Windows NT Workstation 4.0 Developer Edition
Kata kunci: 
kbdownload kbarttypeshowme kbfile kbgraphxlinkcritical kbhowto kbsample kbmt KB268343 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:268343

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