似乎“!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
答案 0 :(得分:0)
This link指向this one这说明基本上它是硬编码的。
堆栈跟踪的最大深度当前硬编码为16 (虽然它有可能在未来发生变化)。还有那个 包括堆栈的内核模式部分的一些条目 跟踪。这些堆栈跟踪条目可以由内核或驱动程序显示 开发人员在内核调试器中使用!htrace。所以到处走走 每条跟踪的11个用户模式条目听起来很准确。
答案 1 :(得分:0)
很遗憾,你不能。
假设您已正确设置符号,我会看到以下可能性
!htrace报告的一些跟踪可能来自不同的进程上下文。在这种情况下,返回地址可能无法在当前进程上下文中正确解析,或者可能会解析为错误的符号。
来源:WinDbg帮助(.hh !htrace
)
如果其他进程将句柄注入您的进程并且地址与该进程相关,则会发生这种情况。在这种情况下,!htrace
列出的进程ID与您正在调试的进程(类型|
(管道)不匹配以获取进程ID)。
在这种情况下,您可以附加到流程(.attach 0x<pid>
,此处0n
是默认值)并尝试从那里获取剩余的callstack,但我自己从未这样做过。