0

似乎“!htrace -diff”只能显示16帧。如何增加堆栈跟踪中的帧数?以下是!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
4

2 回答 2

0

不幸的是你不能。

假设您正确设置了符号,我看到以下可能性

!htrace 报告的一些跟踪可能来自不同的进程上下文。在这种情况下,返回地址可能无法在当前进程上下文中正确解析,或者可能解析为错误的符号。

来源:WinDbg 帮助 ( .hh !htrace)

如果不同的进程将句柄注入您的进程并且地址与该进程相关,则可能会发生这种情况。在这种情况下,列出的进程 ID!htrace与您正在调试的进程不匹配(键入|(管道)以获取进程 ID)。

在这种情况下,您可以附加到进程(.attach 0x<pid>,0n此处为默认值)并尝试从那里获取剩余的调用堆栈,但我自己从未这样做过。

于 2014-12-09T20:09:01.983 回答
0

此链接指向链接,它表明它基本上是硬编码的。

当前堆栈跟踪的最大深度硬编码为 16(尽管将来可能会更改)。此外,这包括堆栈跟踪的内核模式部分的一些条目。内核或驱动程序开发人员可以通过在内核调试器中使用 !htrace 来显示这些堆栈跟踪条目。因此,为每个跟踪获取大约 11 个用户模式条目听起来很准确。

于 2014-12-09T14:54:28.383 回答