2014-12-09 66 views
0

看來「!htrace -diff」只能顯示16幀。如何增加堆棧軌跡中的幀數?以下是由!htrace -diff檢測到的泄漏手柄之一。沒有完整的堆棧跟蹤,我無法從中讀取任何內容。如何在「!htrace -diff」結果中獲取堆棧軌跡的所有幀?

Handle = 0x00000f7c - OPEN 
Thread ID = 0x00001cc4, Process ID = 0x00009f20 

0x01b8dad8: +0x01b8dad8 
0x018c6e93: +0x018c6e93 
0x7788179a: +0x7788179a 
0x000a20bb: +0x000a20bb 
0x753ab069: +0x753ab069 
0x7539cf87: +0x7539cf87 
0x75322776: +0x75322776 
0x7539d07e: +0x7539d07e 
0x7539c549: +0x7539c549 
0x778ae707: +0x778ae707 
0x7785c32e: +0x7785c32e 
0x77a2ff66: ntdll!ZwCreateEvent+0x00000012 
0x69bffc58: verifier!AVrfpNtCreateEvent+0x0000006b 
0x77390d93: KERNELBASE!CreateEventExW+0x0000006e 
0x773911c6: KERNELBASE!CreateEventW+0x00000027 
0x69bffd8f: verifier!AVrfpCreateEventW+0x00000078 
+0

有同樣的問題。 :( – Boris 2014-12-09 14:42:09

回答

0

This link指向this one這說明它基本上是硬編碼的。

堆棧跟蹤的最大深度是目前硬編碼到16 (雖然它可能會在未來改變)。此外,該 包含幾個條目,用於堆棧 跟蹤的內核模式部分。這些堆棧跟蹤條目可以由內核或驅動程序 通過在內核調試器中使用!htrace顯示。因此,每個跟蹤的11個用戶模式條目聽起來都很準確。

+0

謝謝,我也讀過那篇文章,但是如果htrace無法返回完整的堆棧跟蹤,其他方式調試處理泄漏? – 2014-12-10 02:54:28

0

不幸的是,你不能。

假設你有符號設置正確,我看到了以下可能性

一些靠!HTRACE報道的痕跡可能是從不同的進程上下文。在這種情況下,返回地址可能無法在當前進程上下文中正確解析,或者可能解析爲錯誤的符號。

來源:WinDbg的幫助(.hh !htrace

如果一個不同的進程句柄注入到你的進程和地址關聯到該進程會發生這種情況。在這種情況下,!htrace列出的進程ID與您正在調試的進程不匹配(輸入|(管道)以獲取進程ID)。

在這種情況下,您可以附加進程(.attach 0x<pid>,0n默認在此處),並嘗試從那裏獲取剩餘的調用堆棧,但我從來沒有這樣做過。

+0

我的所有作品都在一個進程中。是否有任何其他方式來獲取泄漏的手柄沒有完整的堆棧跟蹤? – 2014-12-10 02:33:28

+0

這樣的過程可能是病毒掃描程序或其他程序在系統內部深處。您嘗試關閉它們嗎? – 2014-12-10 21:49:03

+0

是的,所有的東西都關閉了 – 2014-12-11 10:07:40