Freigeben über


Interpretieren eines Protokollvergleichs

Sie können im Laufe der Zeit mehrere User-Mode-Dump-Heap-Protokolle (UMDH) desselben Prozesses generieren. Anschließend können Sie UMDH verwenden, um die Protokolle zu vergleichen und zu bestimmen, welche Aufrufstapelzuordnungen zwischen den Testversionen am meisten gewachsen sind.

Der folgende Befehl weist UMDH beispielsweise an, zwei UMDH-Protokolle zu vergleichen, Log1.txt und Log2.txt, und leitet die Ausgabe in eine dritte Datei um, Compare.txt.

umdh -v Log1.txt Log2.txt > Compare.txt

Die resultierende Compare.txt-Datei listet die Aufruflisten auf, die in jedem Protokoll aufgezeichnet wurden, und zeigt für jeden Stapel die Änderung der Heapzuordnungen zwischen den Protokolldateien an.

Die folgende Zeile aus der Datei zeigt beispielsweise die Änderung der Zuordnungsgröße für die Funktionen im Aufrufstapel mit der Bezeichnung "Backtrace00053".

In Log1.txt werden für die Aufrufe im Stapel 40.432 Bytes (0x9DF0) verwendet, aber in Log2.txt werden in derselben Anrufliste 61.712 (0xF110) Bytes verwendet, was einem Unterschied von 21.280 (0x5320) Bytes entspricht.

+ 5320 (f110 - 9df0) 3a allocs BackTrace00053 
Total increase == 5320

Im Folgenden ist der Stapel für die Zuordnung aufgeführt:

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

Eine Untersuchung des Aufrufstapels zeigt, dass die LeakyFunc-Funktion Arbeitsspeicher mithilfe der Visual C++-Laufzeitbibliothek zuzuweisen hat. Wenn die Untersuchung der anderen Protokolldateien zeigt, dass die Zuordnung im Laufe der Zeit zunimmt, können Sie möglicherweise zu dem Schluss kommen, dass der vom Heap zugewiesene Arbeitsspeicher nicht freigegeben wird.

Symboldateien zum Analysieren einer Protokolldatei

Angenommen, Sie verfügen über zwei Computer: einen Protokollierungscomputer , auf dem Sie ein UMDH-Protokoll erstellen, und einen Analysecomputer , auf dem Sie das UMDH-Protokoll analysieren. Der Symbolpfad auf Ihrem Analysecomputer muss auf die Symbole für die Windows-Version verweisen, die zum Zeitpunkt der Protokollerstellung auf dem Protokollierungscomputer geladen wurden. Verweisen Sie den Symbolpfad auf dem Analysecomputer nicht auf einen Symbolserver. Wenn Sie dies tun, ruft UMDH Symbole für die Version von Windows ab, die auf dem Analysecomputer ausgeführt wird, und UMDH zeigt keine aussagekräftigen Ergebnisse an.

Siehe auch

Verwenden von UMDH zum Suchen eines User-Mode Speicherverlusts