Umdhtools.exe: Come utilizzare Umdh.exe per individuare perdite di memoria

Traduzione articoli Traduzione articoli
Identificativo articolo: 268343 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

L'utilitÓ di modalitÓ utente dump heap (UMDH) funziona con il sistema operativo per analizzare le allocazioni di heap di Windows per un processo specifico. Questa utilitÓ e gli altri strumenti associati, sono principalmente mirati per Windows 2000 e Windows XP. Fare clic sul pulsante Riproduci per visualizzare questo flusso multimediale di prova.

Nota. Il video Ŕ codificato con codec ACELP «, Ŕ necessario installare il codec ACELP « gratuito disponibile all'indirizzo http://www.ACELP.NET/acelp_eval.PHP



Nota. La funzione malloc nel modulo C run-time (CRT) utilizza l'omissione dei puntatori ai frame (FPO) nella versione originale di Windows Server 2003, non possono visualizzare le informazioni dello stack completa della funzione malloc utilizzando lo strumento UMDH. Questo problema viene risolto nel modulo CRT di Windows Server 2003 Service Pack 1 (SP1). Pertanto, Ŕ possibile visualizzare le informazioni sullo stack completo della funzione malloc in Windows Server 2003 SP1.

Informazioni

Prima di utilizzare UMDH

Se si ritiene che si stia verificando una perdita di memoria, tenere presente che problemi potrebbero non essere visualizzato come la memoria. Si potrebbe scoprire che un perdita di memoria non Ŕ una perdita di memoria effettiva, ma Ŕ un miglioramento delle prestazioni. Per esempio, il motore di database Microsoft Jet pu˛ consumare grandi quantitÓ di memoria (fino a 128 MB su un computer con 256 MB) perchÚ scrive e recupera i dati memorizza nella cache. La cache consente a Microsoft Jet per ottenere la lettura rapida-ahead e write-ahead memorizzazione nel buffer.

Per determinare se un processo si verifica memoria perdite, utilizzare Performance Monitor di Windows (Perfmon.exe) e monitorare privato Byte nella categoria di processo per l'applicazione. Byte privati Ŕ il memoria totale che il processo Ŕ allocata, ma non condivide con altri processi. Si noti che questo Ŕ diverso da byte virtuali, che Ŕ anche interessante da monitorare. Byte virtuali Ŕ la dimensione in byte della corrente di spazio di indirizzi virtuali utilizzato dal processo. Possibile perdita di un'applicazione virtuale memoria, ma potrebbe non essere presente una differenza nei byte privati allocati. Se non Ŕ disponibile memoria aumenta quando si esegue il monitoraggio byte privati, ma Ŕ sospetta ancora in esecuzione monitor byte virtuali per vedere memoria insufficiente Se si utilizza la memoria virtuale. Per ulteriori informazioni sul rilevamento di perdite di memoria e la panoramica di Performance Monitor di Windows (Perfmon.exe), visitare il seguente sito Web Microsoft:
http://msdn.microsoft.com/en-us/library/ms404355.aspx
Per assicurarsi che l'applicazione subisce perdite di memoria, inserire il sospetto di codice in un ciclo con molte iterazioni e quindi monitorare private e byte virtuali per ogni aumento di memoria. Controllare per assicurarsi che il numero byte privati e byte virtuali non rimane costante e la numero non aumenta pi¨. Se esiste un punto in cui la memoria si arresta l'aumento, (ad esempio, ossia non continua ad aumentare illimitatamente) Ŕ non una perdita di memoria ma pi¨ probabile, si vedere una cache che sta crescendo al dimensione massima.

Se si determina che una perdita di memoria, prima di vedere utilizzare UMDH, attenersi alla seguente procedura:
  1. Installare l'utilitÓ UMDH.
  2. Impostare la variabile di ambiente PATH di sistema per includere il cartella in cui Ŕ installato UMDH.
  3. Impostare la variabile di ambiente NT_SYMBOL_PATH il Microsoft percorso del server di simboli in modo da UMDH Ŕ in grado di individuare simboli di debug file.
L'utilitÓ UMDH Ŕ incluso in strumenti di debug per Prodotti di Windows il seguente sito Web Microsoft:
http://www.microsoft.com/whdc/devtools/ddk/default.mspx
Scaricare e installare l'utilitÓ e quindi impostare il sistema di percorso variabile di ambiente per il percorso in cui sono stati installati gli strumenti di debug.

Prima di utilizzare UMDH, Ŕ necessario installare i simboli di debug corretti per i componenti dell'applicazione e del sistema operativo. Utilizzare Microsoft Server di simboli per acquisire i simboli di debug per i componenti di Microsoft. Per ulteriori informazioni informazioni su Microsoft Symbol Server, fare clic sul seguente numero di articolo per visualizzare l'articolo della Microsoft Knowledge Base:
311503Utilizzare il Server di simboli Microsoft per ottenere i file di simboli di debug
UMDH tenta di trovare i file di simboli tramite la Variabile di ambiente NT_SYMBOL_PATH. Il comando per impostare il percorso da un prompt dei comandi potrebbe essere simile al seguente:
impostare NT_SYMBOL_PATH = SRV * c:\LocalSymbolCache
Per ulteriori informazioni sull'impostazione del debug simbolico informazioni, vedere la sezione "Simboli di Debug" pi¨ avanti in questo articolo.

Dopo aver completato questi passaggi, si Ŕ pronti a utilizzare l'utilitÓ UMDH.

Acquisizione di Heap dump di UMDH

UMDH Ŕ un'utilitÓ che trasferisce le informazioni sull'heap allocazioni di un processo. Queste informazioni includono lo stack di chiamate per ogni allocazione, il numero di allocazioni effettuate tramite lo stack di chiamate, e il numero di byte utilizzati tramite lo stack di chiamate. Ad esempio:
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 di UMDH mostra che esistevano 21280 (0x5320) byte allocati Totale lo stack di chiamate. I 21280 byte allocati da 20 (0x14) separare le allocazioni di 1064 byte (0x428). Lo stack di chiamate viene assegnato un Identificatore ID BackTrace00053.

Per produrre un file di dump dell'heap allocazioni, Ŕ necessario utilizzare l'utilitÓ Gflags.exe, che Ŕ inclusa anche con i prodotti di Debugging Tools for Windows, per informare il sistema operativo che si desidera che il kernel registri le allocazioni.

Si supponga che si desidera Per eseguire il dump del contenuto di heap(s) Notepad.exe. ╚ innanzitutto necessario attivare l'analisi dello stack acquisizione dell'applicazione che si desidera verificare. Per impostazione predefinita, questa funzionalitÓ non Ŕ abilitato. Il comando per attivare questa funzionalitÓ Ŕ la seguente:
gflags -i notepad.exe + ust
Il comando non attivare l'analisi dello stack per i processi giÓ in esecuzione, ma consente l'analisi dello stack per tutte le successive esecuzioni di Notepad.exe. in alternativa, Ŕ possibile impostare il flag tramite l'utente GFLAGS interfaccia (utilizzare Gflags.exe senza alcun argomento per ottenere l'interfaccia utente). Utilizzo l'opzione - ust gflags disattivare la traccia dello stack quando si Ŕ terminato il debug.

Quando si imposta il flag di immagine tramite Gflags.exe, e impostare i simboli di debug, Ŕ possibile avviare il blocco note (il applicazione che utilizza UMDH). Una volta avviato il programma, Ŕ necessario determinare l'ID processo (PID) del processo di blocco note Ŕ stato appena avviato. Il comando per questo Ŕ il seguente:
Tlist
╚ possibile trovare il PID dall'output dell'applicazione TLIST. Inoltre Ŕ possibile ottenere le informazioni sul PID da Task Manager. Si supponga che il PID per il processo di blocco note appena avviato sia 124. ╚ possibile utilizzare UMDH per ottenere un dump dell'heap con il seguente comando:
UMDH - p: 124 - f:notepad124.log
Risultati: si dispone di un dump completo degli heap del processo del blocco note nel File Blocconote124. Mostra tutte le allocazioni effettuate e stack di chiamate cui sono state effettuate le allocazioni.

Utilizzare Umdh.exe per confrontare i file registro di UMDH

Mentre il file di registro UMDH contiene informazioni importanti relative al stato corrente degli heap per un processo, se si Ŕ interessati a trovare un perdita di memoria, potrebbe essere pi¨ utile per confrontare l'output dei due registri e Scoprite quale stack di chiamate ha visto la crescita maggiore tra i file di dump di due. L'utilitÓ di Umdh.exe consente di confrontare due file registro di UMDH per fornire un'analisi del differenza tra di essi. Dopo avere acquisiti in altre due file registro intervalli, Ŕ quindi possibile utilizzare il comando seguente:
UMDH dh1.log dh2.log > cmp12.txt
oppure
UMDH -d dh1.log dh2.log > cmp12.txt
L'opzione della riga di comando -d indica UMDH per visualizzare in formato decimale anzichÚ di esadecimale. L'output del comando Confronta la differenza tra il allocazioni tra i due registri e vengono fornite informazioni che sono simile a il seguente codice:
+ 5320 (f110 - 9df0) 3a allocazioni BackTrace00053 Totale aumento = = 5320
Per ogni voce BackTrace contenuta nei file di registro UMDH, esiste un confronto fatta tra i file in due registri. In questo caso risulta che l'ultimo file di registro Ŕ previste di UMDH 0xF110 byte allocati durante il primo era di riga di comando registro nella riga di comando UMDH aveva 0x9DF0 byte allocati per lo stesso BackTrace (stack di chiamate). "5320" ╚ la differenza nel numero di byte allocati. In questo caso, erano 0x5320 numero di byte allocati tra le ore che il sono stati acquisiti due file registro. I byte proviene dallo stack di chiamate viene identificato da "BackTrace00053".

Il passaggio successivo consiste nel determinare in che backtrace. Se si apre il secondo file di registro e cercare BackTrace00053, si potrebbe scoprire che simile al seguente:
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
				
Quando si visualizza lo stack di chiamate, Ŕ possibile verificare che la funzione LeakyFunc alloca memoria tramite la libreria di runtime di Visual C++ nuova funzione di operatore. Se si rileva che il numero di allocazioni aumenta man mano che si utilizzare pi¨ file di dump, si pu˛ concludere che la memoria non viene liberata.

L'abilitazione delle tracce dello Stack

Le informazioni pi¨ importanti nel Registro di UMDH sono le analisi dello stack delle allocazioni di heap. ╚ possibile analizzare per verificare se un processo esaurisce gli heap memoria. Per impostazione predefinita, le tracce degli stack non vengono acquisite. ╚ possibile abilitare questa funzionalitÓ per processo o a livello di sistema. Utilizzare il comando seguente per attivare stack analisi a livello di sistema:
gflags - r + ust
Riavviare il computer dopo questo comando. Per ogni processo l'attivazione, il comando Ŕ come segue:
gflags -i NomeApp + ust
Dove APPNAME Ŕ il nome del file dell'eseguibile inclusa l'estensione (per esempio, Services.exe, Lsass.exe). Il comando non attiva la traccia dello stack per un processo che Ŕ giÓ in esecuzione. Pertanto, per i processi che non Ŕ possibile riavvio (ad esempio, servizi, lsass, winlogon), Ŕ necessario riavviare il test computer.

Utilizzare i seguenti comandi per verificare le impostazioni hanno stato impostato a livello di sistema o di un processo specifico: a livello di sistema:
gflags - r
Processo:
gflags -i nome APP
Per impostazione predefinita, la profonditÓ di traccia di massima dello stack Ŕ 16. Se si desidera vedere pi¨ stack di chiamate, Ŕ possibile aumentare questo valore eseguendo GFLAGS. Fare clic per selezionare Registro di sistemae quindi digitare una nuova profonditÓ nel Max. Stack Trace Capture profonditÓ controllo di modifica. Fare clic su Applicae quindi riavviare il computer.
Importante: se si utilizza Windows NT 4.0 Service Pack 6, Ŕ necessario utilizzare Umdh_nt4.exe, Umdh.exe e si deve utilizzare il Gflags -r comando per impostare la traccia di stack a livello di sistema. Assicurarsi che si riavviare il computer. Analisi dello stack di Umdh_nt4 non funzionano su una per ogni processo base di Windows NT versione 4. Deve essere impostato per l'intero sistema.

Simboli di debug

Una delle operazioni pi¨ importanti per l'utilizzo di UMDH deve garantire di avere file di simboli buona (file con estensione DBG o PDB) per ottenere una buona traccia degli stack. Come minimo, Ŕ necessario i file di simboli DBG e Ntdll. ╚ possibile acquisire ulteriori simboli di debug pu˛ essere necessario come trovare ulteriori su quali componenti di una perdita di memoria. Per ulteriori informazioni informazioni su come ottenere file di simboli di debug per Microsoft componenti, fare clic sul seguente numero di articolo per visualizzare l'articolo della Microsoft Knowledge Base:
311503Utilizzare il Server di simboli Microsoft per ottenere i file di simboli di debug
Per ulteriori informazioni su come utilizzare il Microsoft Symbol Server e come ottenere i pacchetti di simboli di Windows, visitare il sito Web Microsoft riportato di seguito:
http://www.microsoft.com/whdc/devtools/ddk/default.mspx
Quando si creano componenti con Visual C++, Ŕ importante che non Ŕ Database di programma per la modifica e continuazione selezionato per C++ opzioni del compilatore. Selezionare invece il Database di programma. Per impostare il percorso di simboli inizializzare la variabile di ambiente NT_SYMBOL_PATH per il percorso da utilizzare. Si possibile utilizzare il Server di simboli Microsoft per acquisire i simboli per Microsoft componenti.
311503 Utilizzare il Server di simboli Microsoft per ottenere i file di simboli di debug
Attenersi alla seguente procedura per impostare il NT_SYMBOL_PATH variabile di ambiente:
  1. Nel Pannello di controllo fare doppio clic su sistema.
  2. Fare clic sulla scheda Avanzate e quindi fare clic su le variabili di ambiente.
Oppure Ŕ possibile impostare la variabile di ambiente NT_SYMBOL_PATH un finestra di comando prima di eseguire UMDH.

Nota: anche includere il percorso per i componenti del file PDB del applicazione. Ad esempio, impostare il percorso per NT_SYMBOL_PATH al seguente:
SRV*c:\Symbols*http://msdl.microsoft.com/download/symbols;c:\myapplicationssymbols
La prima parte di questo percorso punta al Server di simboli Microsoft e gli Stati che verranno scaricati i simboli utilizzati nel c:\Symbols. cartella. La parte che segue il punto e virgola Ŕ il percorso dei file PDB (file di simboli) in particolare per l'applicazione di perdite.

Avvio di UMDH

L'unico parametro della riga di comando per UMDH Ŕ l'opzione -p , che specifica il PID del processo da cui un heap si otterrÓ il dump. Il PID Ŕ possibile ottenere utilizzando Task Manager o il Programma Tlist.exe. Per un comando analogo al seguente, il registro sarÓ oggetto di dumping nell'output standard:
UMDH - p: PID
UMDH visualizza anche diversi messaggi informativi standard errore, pertanto se non reindirizzarli, viene mescolata con il registro reale. Per raccogliere i messaggi informativi UMDH in un file, utilizzare il comando riportato di seguito:
UMDH - p: 2>umdh.msg PID
Se si desidera raccogliere il log viene scaricato da UMDH in un file utilizzare uno dei seguenti comandi:
UMDH - p: PID > UMDH
oppure
UMDH - p: PID-f:umdh.log
Questi comandi sono equivalenti.

Il registro predefinito Ŕ ottenuto da UMDH contiene un'enumerazione dei consumatori di heap vengono ordinati in base numero di allocazione. Se per il debug, Ŕ necessario anche un file di dump di tutti i di blocchi allocati con le corrispondenti tracce degli stack, l'opzione -d pu˛ essere utilizzato:
UMDH - p: PID -d
Se si utilizza questo comando, si pu˛ vedere in di UMDH file di registro:
Allocazioni per la traccia BackTrace00046: 005F69A0 005F6150
Questi sono gli indirizzi di memoria delle allocazioni per che stack di chiamate. Se il debugger Ŕ connesso al processo, Ŕ possibile eseguire il dump di contenuto della memoria a questi indirizzi per vedere ci˛ che Ŕ stato allocato.

Se il registro contiene troppe informazioni, pu˛ essere limitata solo a utenti che hanno l'allocazione contano supera una determinata soglia. Utilizzare il comando riportato di seguito:
UMDH - p: PID - t: soglia
Tutte le opzioni della riga di comando (ad esempio, -p, -f, -t, -d) possono essere specificate contemporaneamente in qualsiasi ordine. Di seguito Ŕ riportato un esempio della riga di comando pi¨ difficile:
UMDH - p: 123 - t: 1000 - f:umdh.log -d
Questo comando esegue il dump degli heap per il processo con PID 123 nel il file UMDH. Scarica solo le tracce dello stack tale account per pi¨ di 1000 allocazioni trasferisce inoltre gli indirizzi di blocchi di heap allocati tramite ogni traccia dello stack.

╚ un'altra opzione di UMDH utile l'opzione -l . In questo modo, i numeri di riga e file da stampare nel stack di chiamate quando possibile.

Spiegate dell'Output di UMDH

Se il registro Ŕ stato reindirizzato a un file (umdh - p: PID-f:umdh.log), il contenuto Ŕ simile al seguente, che Ŕ stato ottenuto da un processo Blocco note in esecuzione:
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
				
Il registro contiene un dump di ogni heap del processo. In questo esempio, la registrazione inizia con un heap all'indirizzo 270000. Dopo alcuni contatori globali per l'heap, il registro contiene un dump in ordine decrescente delle tracce nello stack che sono responsabili per la maggior parte delle allocazioni. Confrontando la dinamica di memoria utilizzata in diversi momenti, Ŕ possibile dedurre ci˛ che si Ŕ verificato durante il processo e se l'utilizzo dell'heap Ŕ simile a una perdita.

Problemi che possono verificarsi quando si utilizza UMDH

Si verificano gli errori pi¨ comuni quando si utilizza UMDH poichÚ stack non Ŕ attivata. Inoltre, i simboli non corretti per Ntdll. dll impediscono UMDH da in esecuzione. Per gli altri file di simboli UMDH viene eseguito, ma il file di registro contiene stack tracce che non hanno nomi di funzione, ma con gli indirizzi relativi all'interno di moduli. Un terzo errore distante Ŕ specifica di un PID errato. Di seguito messaggio di errore si verifica quando si tenta di eseguire UMDH per un processo non Ŕ abilitata l'analisi dello stack:
C:\>UMDH - p: 1140 UMDH: Logtime 2000-06-28 12:43 - Machine = MioComputer - PID = connessione 1140...Modulo enumerazione completa. SymGetSymFromName (processo, ntdll!RtlpStackTraceDataBase, xxx) non riuscito, LastError = 126 UmdhGetAddrFromName Impossibile trovare DB traccia dello Stack puntatore (ntdll!RtlpStackTraceDataBase). i simboli di Ntdll. dll sono erronee; Abbiamo deve essere in grado di vedere non Importa simboli.
Utilizzare il comando seguente per Controllare le impostazioni per il processo che si sta indagando:
gflags -i NomeApp
Utilizzare il comando riportato di seguito quando si affida stack a livello di sistema analisi:
gflags - r
Questi comandi viene visualizzato l'elenco dei flag impostati per l'applicazione. Si noti che nel caso di traccia di stack a livello di sistema, la funzionalitÓ potrebbe essere visualizzato come attivata, ma se non Ŕ stato riavviato il computer dopo l'esecuzione del comando gflags - r + ust , esso non viene effettivamente attivato. Se si desidera conoscere ogni applicazione in cui Ŕ abilitata l'analisi dello stack, Ŕ possibile visualizzare la chiave della sottochiave USTEnabled Nella seguente chiave del Registro di sistema:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Opzioni di esecuzione
Se si esegue UMDH per un processo di analisi dello stack abilitato, ma l'applicazione non Ŕ stato riavviato poichÚ Ŕ impostato il flag, Ŕ possibile che venga visualizzato il seguente messaggio nei file registro:
╚ stata una traccia dello stack non salvate per l'allocazione (indice = = 0)
Se si esegue non impostare il corretto percorso di simboli o i simboli non sono corretti e si esegue UMDH, Ŕ possibile messaggio di errore nel registro. Tuttavia, pu˛ essere solo visualizzato non corretti o stack di chiamate fuorvianti. Per verificare di disporre i simboli corretti, avviare la Debugger di sistema NTSD per un processo, ad esempio:
blocco note NTSD
Dalla console di debug, eseguire il comando LD per caricare le informazioni sui simboli per il modulo e il comando LM per elencare quali moduli sono caricati i simboli. Se il output del comando LM indica caricati simboli di esportazione, i simboli non sono corretti. Se si dispone di simboli PDB caricati, i simboli sono buoni. ╚ possibile che venga visualizzato il seguente messaggio di errore se Ŕ stato specificato un PID errato:
C:\>UMDH - p: 1000 UMDH: Logtime 2000-06-28 09:45 - Machine = MioComputer - PID = 1000 connessione... OpenProcess non riuscito, LastError = 0x57

Chiamare UMDH da Visual Basic

Pu˛ essere utile anche eseguire il dump di un numero di log nel tempo PoichÚ la perdita potrebbe non essere molto evidente inizialmente. Ad esempio, se si ritiene che l'applicazione Web pagine ASP (ASP) Ŕ perdita di memoria, pu˛ essere utile creare un componente COM in Visual Basic di a UMDH. ╚ quindi possibile chiamare tale componente dalla pagina ASP.

Il di seguito Ŕ riportato un codice di Visual Basic che richiama UMDH e crea un file di registro che si basa sull'ora corrente:
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")
				

Utilizzare UMDH con Windows NT 4.0 Service Pack 6a (SP6a)

L'utilitÓ UMDH Ŕ incluso in strumenti di debug per Prodotti di Windows non funziona in Windows NT 4.0. Un file eseguibile autoestraente (Umdhnt4tools.exe) Ŕ incluso in questo articolo e contiene le seguenti opzioni strumenti da utilizzare con NT 4.0:
  • Umdh_nt4.exe e dbghelp. dll
    Si tratta di Windows NT 4.0 Versione SP6 dell'utilitÓ UMDH.
  • Dhcmp.exe
    Questa utilitÓ consente di confrontare due UMDH dump per determinare se una memoria possibile perdite di memoria si verifica.
Il file seguente Ŕ disponibile per il download da Microsoft Download Center:
Riduci l'immagineEspandi l'immagine
Download
Download Umdhnt4tools.exe
Data di rilascio: 28 agosto 2002

Per ulteriori informazioni su come scaricare i file di supporto Microsoft, fare clic sul numero dell'articolo riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base:
119591 Come ottenere file di supporto Microsoft dai servizi online
Microsoft ha analizzato questo file per individuare eventuali virus. Microsoft ha utilizzato il software antivirus pi¨ recente disponibile nella data in cui il file Ŕ stato registrato. Il file viene memorizzato su server con sicurezza avanzata che consentono di impedire modifiche non autorizzate al file. Inserire Umdh_nt4.exe e dbghelp. dll in una cartella, quindi inserirli prima nella variabile di ambiente PATH. Utilizzare Umdh_nt4.exe anzichÚ UMDH.

In un computer che esegue Windows NT 4.0, Ŕ necessario utilizzare Gflags.exe l'analisi dello stack a livello di sistema. Ad esempio:
gflags - r
Assicurarsi che il riavvio del computer. Analisi dello stack Umdh_nt4 non funziona su un singolo processo in Windows NT versione 4.0. ╚ impostata per l'intero sistema.

UMDH_NT4 Ŕ a differenza di UMDH in quanto non esiste confrontare i file di registro. Ad esempio, Ŕ possibile effettuare le seguenti operazioni:
UMDH_NT4 dh1.log dh2.log > cmp12.txt
Al contrario Ŕ necessario utilizzare l'utilitÓ Dhcmp.exe dll incluso in In questo articolo. Il comando Ŕ simile al seguente:
DHCMP dh1.log dh2.log > cmp12.txt

ProprietÓ

Identificativo articolo: 268343 - Ultima modifica: venerdý 29 marzo 2013 - Revisione: 3.0
Le informazioni in questo articolo si applicano a:
  • 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
Chiavi:á
kbdownload kbarttypeshowme kbfile kbgraphxlinkcritical kbhowto kbsample kbmt KB268343 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 268343
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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