Memory leaks 如何在“!htrace-diff”结果中获得堆栈跟踪的所有帧?

Memory leaks 如何在“!htrace-diff”结果中获得堆栈跟踪的所有帧?,memory-leaks,windbg,handle-leak,Memory Leaks,Windbg,Handle Leak,看来!htrace-diff只能显示16帧。如何增加堆栈跟踪中的帧计数?以下是检测到的泄漏句柄之一!没有完整的堆栈跟踪,我无法从中读取任何内容 Handle = 0x00000f7c - OPEN Thread ID = 0x00001cc4, Process ID = 0x00009f20 0x01b8dad8: +0x01b8dad8 0x018c6e93: +0x018c6e93 0x7788179a: +0x7788179a 0x000a20bb: +0x000a20bb 0x753a

看来!htrace-diff只能显示16帧。如何增加堆栈跟踪中的帧计数?以下是检测到的泄漏句柄之一!没有完整的堆栈跟踪,我无法从中读取任何内容

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
这说明它基本上是硬编码的

堆栈跟踪的最大深度当前硬编码为16 虽然将来可能会改变。还有, 包括堆栈内核模式部分的一些条目 查出这些堆栈跟踪条目可以通过内核或驱动程序显示 开发人员通过使用!内核调试器中的htrace。所以四处走动 每个轨迹的11个用户模式条目听起来都很准确


不幸的是你不能

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

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

来源:WinDbg帮助。hh!htrace

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


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

有相同的问题:我所有的作品都在一个过程中。有没有其他方法可以在没有完整堆栈跟踪的情况下获取泄漏的句柄?这样的过程可能是病毒扫描程序或系统深处的其他程序。你试过关掉吗?谢谢,我也读过那篇文章。但是,如果htrace不能返回完整的堆栈跟踪,还有其他方法来调试处理泄漏吗?