Share via


解譯記錄比較

您可以產生多個User-Mode傾印堆積 (UMDH) 一段時間的相同程式記錄。 然後,您可以使用 UMDH 來比較記錄,並判斷哪些呼叫堆疊配置在試用版之間成長最多。

例如,下列命令會指示 UMDH 比較兩個 UMDH 記錄、Log1.txt和Log2.txt,並將輸出重新導向至第三個檔案,Compare.txt。

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

產生的Compare.txt檔案會列出每個記錄檔中記錄的呼叫堆疊,並針對每個堆疊顯示記錄檔之間的堆積配置變更。

例如,檔案中的下一行會顯示呼叫堆疊中標示為 「Backtrace00053」 之函式的配置大小變更。

在Log1.txt中,堆疊中的呼叫會考慮 40,432 (0x9DF0) 個位元組,但在Log2.txt中,相同的呼叫堆疊帳戶會用於 61,712 (0xF110) 個位元組,差異為 21,280 個 (0x5320) 位元組。

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

以下是配置的堆疊:

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

檢查呼叫堆疊時,會顯示 LeakyFunc 函式是使用 Visual C++ 執行時間程式庫來配置記憶體。 如果檢查其他記錄檔顯示配置隨著時間成長,您可能會認為從堆積配置的記憶體並未釋放。

分析記錄檔的符號檔

假設您有兩部電腦:您建立 UMDH 記錄檔的 記錄電腦 ,以及分析 UMDH 記錄 的分析電腦 。 分析電腦上的符號路徑必須指向記錄檔建立時載入記錄電腦上之 Windows 版本的符號。 請勿將分析電腦上的符號路徑指向符號伺服器。 如果您這麼做,UMDH 會擷取在分析電腦上執行的 Windows 版本的符號,而 UMDH 將不會顯示有意義的結果。

另請參閱

使用 UMDH 尋找User-Mode記憶體流失